RoR:删除你自己的评论,但不删除其他人

时间:2015-08-18 17:33:15

标签: ruby-on-rails devise erb

我有一个运行得很漂亮的项目。我唯一的问题是,只要您已登录,就可以删除任何人的评论。我需要它来删除您自己的评论,但没有其他人的评论。有什么建议吗?

在我的_comment.html.erb partial:

<p><%= link_to 'Delete', [comment.post, comment],
 method: :delete,
 class: "button",
 data: { confirm: "Are you sure?" }%>
</p>

我的评论控制器:

def destroy
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
@comment.destroy unless comment.user != current_user

redirect_to post_path(@post)
end

2 个答案:

答案 0 :(得分:1)

您有身份验证,但您没有授权。我建议花点时间研究ruby工具箱中的授权宝石:https://www.ruby-toolbox.com/categories/rails_authorization

如果你不想走那条路,你可以简单地用以下逻辑实现一些东西

comment.destroy unless comment.user != current_user

假设评论belongs_to用户和用户有一个current_user方法:)

干杯!

答案 1 :(得分:0)

当授权错误永远不会发生时,有一点授权技巧是可行的。

此技巧将授权错误归为非存在错误。如果用户未获得授权对评论执行某些操作,则该操作将被视为,就像该评论不存在。现在您已经了解其中的含义......

......看哪,它来了:

@comment = @post.comments.where(user_id: current_user.id).find(params[:id])