:あなたが唯一のこの2行を追加する必要がありますコントローラでRB
class Role < ActiveRecord::Base
has_and_belongs_to_many :users
end
User.rb
class User < ActiveRecord::Base
has_many :accounts
has_and_belongs_to_many :roles
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable and :timeoutable
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :username, :password, :password_confirmation, :remember_me, :role_ids
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
end
Ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if user.role? :administrator
can :manage, :all
elsif user.role? :operator
can :read, Account
can :read, Server
elsif user.role? :customer
can :manage, Account
can :read, Server
end
end
end
特定の役割や管理者などのコードを持っている他のすべてのクラスが継承する基本Userモデルを作成することです。その後、Userモデルから継承したAdminクラスとModeratorクラスを作成できます。これは、コード内のユーザーの役割を常に確認することを避けることができます。 current_user.do_some_admin_thing if current_user.is_admin?
。あなたのクラスはUserクラスは、最も基本的な権限を持っている、モデレーターは、ユーザーがプラスモデレータ特定の方法および管理者は、ユーザーとモデレータができることはすべてプラス管理者の特定を行うことができ、すべてを行うことができます。この例では、この
class User < ActiveRecord::Base
# base user methods in here
end
class Moderator < User
def do_moderator_thing
# perform a moderator task
end
end
class Admin < Moderator
def do_admin_thing
# perform an admin task
end
end
のようになります。メソッド。
すべての異なるユーザーの役割はデータベース内で同じテーブルを使用しますが、懸念事項はきちんとクラスに分けられます。
新しいユーザーを作成することも簡単ですAdmin.new :name => 'bob'
Adminクラスは、管理者として管理者として定義されている管理者クラスで、相互作用する役割システムの内部動作を知る必要のない素晴らしいインターフェイスを提供しますユーザー。
これは私の提案でした。このアプローチについて私が気に入っているのは、残りのアプリケーション・ロジックからビジネス・ポリシーを分離することです。 –
はい、この分離は良い、柔軟な能力を与えます。私は1つのプロジェクトで開発者が非常に不快な認証システムを作りました。そこでは新しい役割と能力を追加するために各コントローラとモデルに多くのコードを書く必要がありました。私はDeviseとCanCanをインストールして設定するために、古いシステムを削除して2時間近くを費やすのに多くの時間を費やしています。今私は幸せです。そして私が自由な時間を過ごす時、私は役割と能力を管理するためのユーザーインターフェイスを書くつもりです。これらのシステムでは、この作業は簡単になりました。 –
これはいくつかのアプリケーションでこれを使用しましたが、devise-cancanのミックスも「ベスト・オブ・ブリード」のアプローチになっています。認証/承認の今年の標準として、多くの組織で急速に採用されています。 –