【发布时间】:2017-05-28 18:53:52
【问题描述】:
我的工作能力定义如下:
routes.rb
resources :projects do
resources :tasks
end
能力.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
如果用户被邀请到项目中,这可以正确地让用户创建任务。
但是,我不希望用户能够:管理项目。我只需要用户能够如下索引项目。
能力.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
当我加入上述能力后,用户将无法再访问或对任务执行任何操作。如何通过项目创建任务能力,只给项目一个:index能力?
【问题讨论】:
-
can [:index], Project, invites: {supplier: { user_id: user.id }}- 但您确实处于复杂的地步,Pundit 是比 CanCanCan 更好的选择。 -
是的。这是我需要进行身份验证的最后一块。看看我是否可以避免重建。
标签: ruby-on-rails cancan cancancan