CanCanCan授权关联对象
CanCanCan authorize associated objects
我的Routes.rb:
resources :users
resources :clients do
resources :branches
end
我在 Ability.rb 中有这个。用户只能更新他自己的客户端。
can [:update], Client, :id => user.clients.pluck(:id)
用户还应该能够 :create, :update, :show 属于客户端的分支。它可能看起来像这样:
can [:create, :update, :show], Branch, :client => { :id => user.clients.pluck(:id) }
它适用于 :update、:show,但不适用于 :create。这是因为新分支在创建之前没有 client_id。
我如何让它适用于 :create?
你现在的能力其实不是调用branch的外键字段检查。像这样使用嵌套调用相当于 client.id
而不是 client_id
,就像你想要的那样。
应阅读:
can [:create, :update, :show], Branch, client_id: user.client_ids
或者,与您的风格保持一致:
can [:create, :update, :show], Branch, client_id: user.clients.pluck(:id)
我的Routes.rb:
resources :users
resources :clients do
resources :branches
end
我在 Ability.rb 中有这个。用户只能更新他自己的客户端。
can [:update], Client, :id => user.clients.pluck(:id)
用户还应该能够 :create, :update, :show 属于客户端的分支。它可能看起来像这样:
can [:create, :update, :show], Branch, :client => { :id => user.clients.pluck(:id) }
它适用于 :update、:show,但不适用于 :create。这是因为新分支在创建之前没有 client_id。 我如何让它适用于 :create?
你现在的能力其实不是调用branch的外键字段检查。像这样使用嵌套调用相当于 client.id
而不是 client_id
,就像你想要的那样。
应阅读:
can [:create, :update, :show], Branch, client_id: user.client_ids
或者,与您的风格保持一致:
can [:create, :update, :show], Branch, client_id: user.clients.pluck(:id)