我有一个人们可以撰写帖子的网络,他们有自己帖子的个人信息,以及每个人的网络信息。
问题是,任何omniauth用户都可以通过在URL上输入/编辑或删除来编辑其他用户。
不能为现场提供此服务!
有没有人能快速回答如何阻止这种情况?我有:
before_filter :authenticate_user!, :except => [:index, :show]
但我无法弄清楚如何将编辑锁定到创建帖子的用户。
Model- user.rb
class User
has_many :posts
end
模型 - post.rb
class Post
belongs_to :user
end
如果您想了解更多,请告诉我们 - 感谢您的帮助! -D
答案 0 :(得分:3)
如果我正确地读了您,您的用户将通过OmniAuth进行身份验证,但现在您正在寻找一种方法来根据权限或所有权对其进行“授权”以获取特定资源/操作。
用于授权用户,组,角色和中间资源/操作的最流行的gem是CanCan。
还有一个railscast video帮助我了解gem在我的应用程序中的应用。
一旦你知道如何在CanCan中编写能力,take a look here就能够根据父用户解决关于后期编辑的原始问题。
答案 1 :(得分:1)
如果您在没有CanCan Gem的情况下从头开发应用程序,请使用此方法
def logged_in_user
unless current_user?(@model.user)
flash[:danger] = "You do not have authorization to edit this post" #if not logged in as the owner of the post
redirect_to login_url
end
end
并确保您已设置之前的操作
before_action:logged_in_user,仅限:[:edit,:update,:delete]