CanCanとdeclarative_authorizationを知っていて、両方でロールベースの承認を実装したので、CanCanをお勧めします。ちょうど私の2セント。
例(テストされていませんが、残念ながらここではテストできず、コードにアクセスできません)
したがって、次のような構造があるとしましょう。
class User < ActiveRecord::Base
belongs_to :role
end
class Role < ActiveRecord::Base
has_many :users
# attributes: project_read, project_create, project_update
end
次に、CanCanは次のようになります。
class Ability
include CanCan::Ability
def initialize(user)
@user = user
@role = user.role
# user can see a project if he has project_read => true in his role
can :read, Project if role.project_read?
# same, but with create
can :create, Project if role.project_create?
# can do everything with projects if he is an admin
can :manage, Project if user.admin?
end
end
必要なすべての情報は、githubのCanCanwikiにあります。読むための個人的な推奨事項:
基本的には、上記の例を拡張して、関係を通じて自分の役割を含める必要があります。簡単にするために、で追加のヘルパーメソッドを作成することもできますability.rb
。
あなたが陥る可能性のある主な平均的な警告(少なくとも私はそうします):ユーザーができないことを定義する前に、ユーザーがモデルで何かをできることを確認してください。そうでなければ、あなたはイライラしてそこに座って、「しかし、なぜですか?私はユーザーにできないことを書いたことがない」と思うでしょう。うん。しかし、あなたは彼ができることを明示的に書いたこともありません...