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)