我有一個工作能力定義如下:Cancancan嵌套資源授權
的routes.rb
resources :projects do
resources :tasks
end
ability.rb
can [:manage], Project, invites: {supplier: {:user_id => user.id}}
can [:new, :create], Task
can [:update, :show, :destroy, :edit], Task, user_id: user.id
任務控制器:
load_and_authorize_resource :project
load_and_authorize_resource :task, :through => :project
這適當地讓th e用戶創建一個任務,如果他們被邀請參加一個項目。
但是,我不希望用戶能夠:管理項目。我只需要用戶能夠按如下所示對項目進行索引。
ability.rb
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
當我把在能力之上,用戶可以不再訪問或執行的任務的任何行動。如何通過項目創建任務能力,只給項目的索引能力?
'簡化條件可以[:索引]項目,邀請:{供應商:{USER_ID:user.id}}' - 但你真的是在複雜的點Pundit是比CanCanCan更好的選擇。 – max
是的。這是我需要進行身份驗證的最後一部分。看看我能否避免重建。 – HoosierCoder