我有一个有两个角色的应用程序,超级和管理员。 Super可以做任何事情,管理员应该能够做除类别之外的所有事情。我已经实现了以下功能,但它仍允许访问管理员的类别:
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :super
can :manage, :all
elsif user.has_role? :admin
cannot :manage, :categories
can :manage, :all
end
end
如果我将其更改为以下内容,则会将admin锁定在所有内容之外。
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :super
can :manage, :all
elsif user.has_role? :admin
can :manage, :all
cannot :manage, :categories
end
end
我的所有控制器都有load_and_authorize_resource
,但仍然没有运气搞清楚。
答案 0 :(得分:0)
规则最终以数组形式结束。
在您的第一个示例中,当您使用cannot
时,此类规则已从阵列中删除。但是你定义了can :manage, :all
,所以已删除的那些恢复了。
在后面的示例中,cannot
被置于最后,因此删除实际上已生效。