当访问取决于父模型时,使用权威人士的正确方法



我有一个has_many联系人的客户端模型

用户是否可以创建、更新或编辑取决于客户端而不是联系人,而销毁取决于联系人本身。

在ContactPolicy类中,我可以简单地检查@contact.client,看看用户是否可以访问,这很好。

但是,对于List方法,我没有一个联系人,而是一个@client.contacts的列表,因此没有简单的方法可以告诉Pundit允许什么。

我不确定Pundit应该如何处理这个问题。

请注意,我不想要范围,因为它是是或否,具体取决于客户端记录

似乎由于

访问是由客户端而不是联系人确定的,因此确定应该在ClientPolicy而不是ContactPolicy中。

权威策略是简单的 ruby 类,没有规则说功能方法需要与控制器操作相对应。 从您的描述来看,听起来您正在寻找的功能是客户端是否可以list_contacts?。 因此,只需编写该功能并在操作中使用它,而不是默认index?

class ContactsController
  def index
    # assuming you've determined the parent `@client` somehow
    authorize @client, :list_contacts?
    # ...
  end
end
class ClientPolicy
  def list_contacts?
    # your capability logic here
  end
end

最新更新