私のアプリケーションには、編集者と管理者の 2 つの役割があります。編集者にはいくつかの権限が必要で、管理者にはすべての編集者権限とその他の権限が必要です。
ここに私の抜粋がありますability.rb
class Ability
include CanCan::Ability
def initialize(user)
if user.is_admin?
can :edit, Post
end
if user.is_editor?
can :edit, Post, :created_by_id => user.id
can :read, Post
end
end
end
すべての管理者は編集者でもあるため、これでこれらの権限が定義されることを望みました。
- 管理者はすべての投稿を閲覧および編集できます
- 編集者はすべての投稿を読むことができますが、自分が作成した投稿のみを変更できます
ただし、CanCan はパーミッションを付加的に定義していないようです。つまり、CanCan がユーザーが編集者であることを確認すると (ユーザーが管理者でもある場合でも)、より制限的なパーミッションを適用します (つまり、のcan :edit, Post, :created_by_id => user.id代わりにcan :edit, Post)。
これを回避する方法はありますか?明らかな解決策には、コードを繰り返す必要があります。
class Ability
include CanCan::Ability
def initialize(user)
if user.is_admin?
can :edit, Post
can :read, Post # NOT DRY!!!
elsif user.is_editor?
can :edit, Post, :created_by_id => user.id
can :read, Post
end
end
end