1

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

我希望 :office_admin 能够管理其他 :office_admins,而不是 :super_admins。我已经通过能力文件完成了这个想法的一部分。

我的架构:

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

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

4

0 回答 0