我有一个DirectoryController,并且 - 故意 - 没有UsersController。当我创建管理控件时,无疑会添加UsersController,并且将具有完全不同的范围&目的。
当我在目录控制器中调用policy_scoped时,我想使用DirectoryPolicy中的作用域而不是UserPolicy(它还不存在)。我希望以verify_policy_scoped识别的方式执行此操作,这意味着DirectoryPolicy::Scope.new(current_user, User).resolve
的明显工作不仅有点长,而且实际上也不起作用。 (这似乎是一个错误)这似乎是一个明显的疏忽,我确定在某个地方做某些工作,我只是不知道是什么。
我如何在Pundit中做到这一点?
答案 0 :(得分:1)
当你这样做时
DirectoryPolicy::Scope.new(current_user, User).resolve
您有效地绕过了权威的policy_scoped?
跟踪。
我的第一个想法是,如果DirectoryPolicy::Scope
旨在确定您的用户数据的范围,那么您可能需要创建Directory
模型,因为权威期望。它可以像这个一样简单
class Directory < User; end
现在,当您在DirectoryController
@users = policy_scope(Directory)
pundit可以正确推断您想要DirectoryPolicy::Scope
,并且您的resolve
方法可以将scope
视为User
类,因为继承。
如果您不能像我在此处描述的那样继承User
,那么您需要显示应用中的一些实际代码,并提供有关Directory
是什么以及您是什么的更多背景信息#39;重新尝试用它。