2011-03-28 72 views
1

这似乎是一个简单的任务,但我很难找出“轨道”的方式来做到这一点。我应该如何验证对Active Record对象的访问?

我使用Authlogic来验证用户,并且每个用户has_many:博客,:图片等。我不知道该怎么做是限制用户A的博客的访问(显示/更新/编辑/删除)只是给用户A.

看来我有三个选择。

  1. 条件(USER_ID == current_user.id)添加到我所有的查找语句
  2. 使用的before_filter来完成上述
  3. 使用default_scope追加该认证条件(但我认为这将当我去写测试时会很痛苦)。

其他人发现是最好的方法来解决这个问题?

作为一个额外的问题,假设这是一个用户has_many:博客,博客has_many:部分和部分has_many:图像的情况。在这种情况下,属于博客的所有元素都必须限制为用户A,但只有博客具有user_id列。将相同的认证条件附加到章节和图像上的最有效/优雅的方式是什么?

谢谢, 迈克

回答

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的屏幕录像

+0

真棒建议。康康看起来很完美。非常感谢! – CambridgeMike 2011-03-28 22:46:31

0

使用的before_filter与功能,检查用户是否已经验证过了。

相关问题