我正在尝试设置一个管理员角色系统,其中许多管理员具有不同的角色。我从两个角色开始,: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 模型中?