我有一个拥有多个联系人的客户端模型
用户是否可以创建、更新或编辑取决于客户端而不是联系人,而销毁取决于联系人本身。
在 ContactPolicy 类中,我可以简单地检查@contact.client 以查看用户是否可以访问,这很好。
但是对于 List 方法,我没有一个联系人,而是一个 @client.contacts 列表,因此没有简单的方法来告诉 Pundit 允许什么。
我不确定 Pundit 应该如何处理这个问题。
请注意,我不想要范围,因为它是是或否,具体取决于客户记录
我有一个拥有多个联系人的客户端模型
用户是否可以创建、更新或编辑取决于客户端而不是联系人,而销毁取决于联系人本身。
在 ContactPolicy 类中,我可以简单地检查@contact.client 以查看用户是否可以访问,这很好。
但是对于 List 方法,我没有一个联系人,而是一个 @client.contacts 列表,因此没有简单的方法来告诉 Pundit 允许什么。
我不确定 Pundit 应该如何处理这个问题。
请注意,我不想要范围,因为它是是或否,具体取决于客户记录
似乎由于访问是由客户而不是联系人确定的,因此确定应该在.ClientPolicy
而不是ContactPolicy
.
Pundit 策略是简单的 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