Cancan超级和管理员能力不起作用

时间:2014-01-23 17:27:11

标签: ruby-on-rails devise ruby-on-rails-4 cancan

我有一个有两个角色的应用程序,超级和管理员。 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,但仍然没有运气搞清楚。

1 个答案:

答案 0 :(得分:0)

规则最终以数组形式结束。

在您的第一个示例中,当您使用cannot时,此类规则已从阵列中删除。但是你定义了can :manage, :all,所以已删除的那些恢复了。

在后面的示例中,cannot被置于最后,因此删除实际上已生效。