多くの管理者が異なる役割を持つ管理者役割システムをセットアップしようとしています。私は :super_admin と :office_admin の 2 つの役割から始めています。
: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 モデルにプッシュする必要がありますか?