我有一个网络,人们可以在这里写帖子,他们有自己帖子的个人订阅源,每个人的网络订阅源。
问题是,任何omniauth用户都可以通过在URL上键入/edit或delete来编辑另一个用户。
不能将其用于实时网站!
有人能快速回答如何阻止它吗?我有:
before_filter :authenticate_user!, :except => [:index, :show]
但我无法不出错地找出如何将编辑锁定到创建帖子的用户。
型号-user.rb
class User
has_many :posts
end
型号-post.rb
class Post
belongs_to :user
end
如果你想看更多,请告诉我-谢谢你的帮助!-D
如果我没有看错,您的用户将通过OmniAuth进行身份验证,但现在您正在寻找一种方法,根据权限或所有权为他们"授权"特定的资源/操作。
CanCan是为用户、组、角色以及介于两者之间的用户授权资源/操作的最流行的宝石。
Can,你能做CanCan吗?
还有一个railscast视频帮助我理解了gem在我的应用程序中的应用。
一旦你知道如何在CanCan中编写能力,就可以在这里查看一个基于父用户的能力,该能力可以解决你在后期编辑中的原始问题。
如果您在没有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]