1

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

4

0 に答える 0