我应该如何验证对Active Record对象的访问权限?

时间:2011-03-28 19:53:26

标签: ruby-on-rails activerecord authlogic

这似乎是一项简单的任务,但我无法找到“轨道”的方法来做到这一点。

我正在使用Authlogic对用户进行身份验证,每个用户都有_many:博客,:图片等。我不知道该怎么做才限制用户A博客的访问权限(显示/更新/编辑/删除)用户A.

看来我有三种选择。

  1. 将条件(user_id == current_user.id)添加到我的所有Find语句
  2. 使用before_filter完成上述
  3. 使用default_scope附加此身份验证条件(但我认为当我去编写测试时这会很痛苦。)
  4. 其他人发现什么是解决此问题的最佳方法?

    作为一个额外的问题,假设用户has_many:博客,Blog has_many:sections和Section has_many:images。在这种情况下,属于博客的所有元素都需要限制为用户A,但只有博客具有user_id列。将相同的身份验证条件附加到章节和图像的最有效/优雅的方法是什么?

    谢谢, 麦克

2 个答案:

答案 0 :(得分:1)

另一种选择可能是使用cancan宝石。 https://github.com/ryanb/cancan

这非常简单,你也可以解决你的奖金问题。

例如:

can :manage, Blog, :user_id=>user.id
can :manage, Section, :blog=>{:user_id=>user.id}
can :manage, Image, :section=>{:blog=>{:user_id=>user.id}}

如果你有

,这个设置很好
Blog belongs_to User
Section belongs_to Blog
Image belongs_to Section

有关如何设置其余内容的信息,请参阅Wiki

哦,我忘了还有关于cancan

的截屏视频

答案 1 :(得分:0)

使用before_filter和检查用户是否经过身份验证的函数。