我有一个工作能力定义如下: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