我有一个运行得很漂亮的项目。我唯一的问题是,只要您已登录,就可以删除任何人的评论。我需要它来删除您自己的评论,但没有其他人的评论。有什么建议吗?
在我的_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
答案 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])