使用CanCan,可以限制管理员通过AdminAbility为自己或他人分配的角色

时间:2013-04-26 10:39:44

标签: ruby-on-rails cancan rails-activerecord rails-authorization

我正在尝试设置管理员角色系统,其中许多管理员具有不同的角色。我从两个角色开始:super_admin和:office_admin。

我希望:office_admin能够管理其他:office_admins,但不能管理:super_admins。我通过Ability文件完成了部分想法。

我的架构:

class Admin < ActiveRecord::Base
  has_many :admin_assignments
  has_many :admin_roles, :through => :admin_assignments
  attr_accessible :name, :admin_role_ids
end

class AdminAssignment < ActiveRecord::Base
  attr_accessible :admin_id, :admin_role_id
  belongs_to :admin
  belongs_to :admin_role
end

class AdminRole < ActiveRecord::Base
  has_many :admin_assignments
  has_many :admins, :through => :admin_assignments
  attr_accessible :name
end

class AdminAbility
  include CanCan::Ability
  def initialize(admin)
    if admin.role? :super_admin
      can :manage, Admin
    elsif admin.role? :office_admin
      can :manage, Admin, :admin_roles => { :name => ['office_admin'] }
    end
  end
end

我的问题是我无法阻止办公室管理员为自己分配SuperAdmin的角色。这是我可以通过CanCan做的事情,还是我必须将部分授权逻辑推入ActiveRecord模型?

0 个答案:

没有答案