私は作業能力を定義した下記のように:Cancancanネストされたリソースの認可
routes.rbを
resources :projects do
resources :tasks
end
can [:manage], Project, invites: {supplier: {:user_id => user.id}}
can [:new, :create], Task
can [:update, :show, :destroy, :edit], Task, user_id: user.id
ability.rbタスクコントローラ:
load_and_authorize_resource :project
load_and_authorize_resource :task, :through => :project
これにより、ユーザーがプロジェクトに招待された場合、タスクを作成します。
ただし、ユーザーがプロジェクトを管理できないようにする必要があります。私は、以下のようにプロジェクトのインデックスを作成できるようにする必要があります。
私は上記の能力に入れ
can [:index], Project, invites: {supplier: {:user_id => user.id}} ## breaks when changing :manage to :index here
can [:new, :create], Task
can [:update, :show, :destroy, :edit, :index], Task, user_id: user.id
ability.rb、ユーザーはもはやアクセスは、タスク上の任意のアクションを実行することができますか。私はどのようにしてプロジェクトにタスク能力をつけ、プロジェクトに:索引能力を与えるだけですか?
をすることができます抽出して条件を簡素化することができます、プロジェクト、誘う:{サプライヤー:{USER_ID:user.idを}} [インデックス]は、' - しかし、あなたは本当に複雑さの点ですPunditはCanCanCanよりはるかに優れた選択肢です。 – max
真。これは認証に必要な最後の部分です。再構築を避けることができるかどうかを確認する。 – HoosierCoder