授权在CanCan中使用嵌套资源失败

时间:2013-10-22 16:50:13

标签: ruby-on-rails devise cancan

我有一个模型组和一个模型Person。一个人属于一个群体,一个群体拥有多人。它们是嵌套资源。根据{{​​3}},在PeopleController中授权以下内容应该足够了:

load_and_authorize_resource :group
load_and_authorize_resource :person, :through => :group

我特意添加了直接管理人员的能力,但暗示这不应该是必要的,因为它是通过集团授权的。授权在Group模型上正常工作,但在Person上失败。

我可以通过添加此功能来解决这个问题:

can :manage, Person, :group => { :user_id => user.id }

但同样,文档说尽管这样做是一个“好主意”(为什么?)但授权工作不一定是必要的。

我很感激您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

我建议你用积木来定义能力。

can :manage, Person do |person|
  person.group.user_id == user.id
end

这比使用嵌套资源中的哈希定义功能更好。试试吧!