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

Ruby on rails 使用CanCan,限制管理员可以通过AdminAbility分配给自己或他人的角色,ruby-on-rails,cancan,rails-activerecord,rails-authorization,Ruby On Rails,Cancan,Rails Activerecord,Rails Authorization,我正在尝试建立一个管理员角色系统,其中许多管理员有不同的角色。我从两个角色开始:超级管理员和办公室管理员 我希望:office\u admin能够管理其他:office\u管理员,但不希望:super\u管理员。我已经通过能力文件完成了这个想法的一部分 我的模式: class Admin < ActiveRecord::Base has_many :admin_assignments has_many :admin_roles, :through => :admin_assi

我正在尝试建立一个管理员角色系统,其中许多管理员有不同的角色。我从两个角色开始:超级管理员和办公室管理员

我希望:office\u admin能够管理其他:office\u管理员,但不希望:super\u管理员。我已经通过能力文件完成了这个想法的一部分

我的模式:

class Admin < ActiveRecord::Base
  has_many :admin_assignments
  has_many :admin_roles, :through => :admin_assignments
  attr_accessible :name, :admin_role_ids
end
我的问题是我无法阻止办公室管理员将自己指定为超级管理员。这是我可以通过CanCan实现的,还是我必须将部分授权逻辑推送到ActiveRecord模型中

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