如何阻止用户编辑Omniauth中的其他用户帖子(rails)

时间:2013-07-25 16:18:46

标签: ruby-on-rails ruby authentication omniauth posts

我有一个人们可以撰写帖子的网络,他们有自己帖子的个人信息,以及每个人的网络信息。

问题是,任何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

2 个答案:

答案 0 :(得分:3)

如果我正确地读了您,您的用户将通过OmniAuth进行身份验证,但现在您正在寻找一种方法来根据权限或所有权对其进行“授权”以获取特定资源/操作。

用于授权用户,组,角色和中间资源/操作的最流行的gem是CanCan。

Can, can you do the 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]