使用CanCan时,如何为给定类的所有子类指定权限?

时间:2011-01-27 21:35:34

标签: ruby-on-rails-3 cancan

在我的模型中,我有相当数量的模型Item的子类。我希望能够指定对于给定角色,他们对Item的权限适用于Item的所有子类而不显式列出它们;如果我添加新的Item子类,我不想记得更新权限。我怎样才能做到这一点?

例如,此权限

if user.role? :customer_service
   can :read, Item
end

不允许客户服务代表阅读内阁的细节,其中内阁<项目

1 个答案:

答案 0 :(得分:0)

我认为你可以通过向can声明发送一个块来做到这一点。也许是这样的:

if user.role? :cutomer_service
  can do |action, subject_class, subject|
    # Checks if action is :read and if subject_class is a subclass of Item
    action == :read && subject_class < Item
  end
end

我没有对此进行测试,但我认为它应该可行。