如何让 Pundit 将范围应用于与策略名称不同的模型?
How to get Pundit to apply a scope to a model with a different name than the policy?
我有一个 DirectoryController,并且有意没有 UsersController。 UsersController 无疑会在我创建管理控件时添加,并且具有完全不同的范围和目的。
当我在目录控制器中调用 policy_scoped 时,我想使用 DirectoryPolicy 的作用域,而不是 UserPolicy(尚不存在)。我想以 verify_policy_scoped 识别的方式进行,这意味着 DirectoryPolicy::Scope.new(current_user, User).resolve
的明显解决方法不仅有点长而且实际上不起作用。 (这似乎是一个错误)这似乎是一个明显的疏忽,我确信在某处有一些东西可以使这项工作正常进行,我只是不知道是什么。
我如何在 Pundit 中执行此操作?
当你这样做时
DirectoryPolicy::Scope.new(current_user, User).resolve
您实际上绕过了专家的 policy_scoped?
跟踪。
我的第一个想法是,如果 DirectoryPolicy::Scope
旨在确定用户数据的范围,也许您需要创建一个 Directory
模型,正如专家所期望的那样。可以这么简单
class Directory < User; end
现在当你的 DirectoryController
中有这样的东西时
@users = policy_scope(Directory)
专家可以正确推断出您想要 DirectoryPolicy::Scope
,并且您的 resolve
方法可以将 scope
视为 User
class,因为继承。
如果您不能像我在此处描述的那样子class User
,您将需要显示您应用中的一些实际代码,并提供更多关于 Directory
是什么的上下文以及你想用它做什么。
我有一个 DirectoryController,并且有意没有 UsersController。 UsersController 无疑会在我创建管理控件时添加,并且具有完全不同的范围和目的。
当我在目录控制器中调用 policy_scoped 时,我想使用 DirectoryPolicy 的作用域,而不是 UserPolicy(尚不存在)。我想以 verify_policy_scoped 识别的方式进行,这意味着 DirectoryPolicy::Scope.new(current_user, User).resolve
的明显解决方法不仅有点长而且实际上不起作用。 (这似乎是一个错误)这似乎是一个明显的疏忽,我确信在某处有一些东西可以使这项工作正常进行,我只是不知道是什么。
我如何在 Pundit 中执行此操作?
当你这样做时
DirectoryPolicy::Scope.new(current_user, User).resolve
您实际上绕过了专家的 policy_scoped?
跟踪。
我的第一个想法是,如果 DirectoryPolicy::Scope
旨在确定用户数据的范围,也许您需要创建一个 Directory
模型,正如专家所期望的那样。可以这么简单
class Directory < User; end
现在当你的 DirectoryController
@users = policy_scope(Directory)
专家可以正确推断出您想要 DirectoryPolicy::Scope
,并且您的 resolve
方法可以将 scope
视为 User
class,因为继承。
如果您不能像我在此处描述的那样子class User
,您将需要显示您应用中的一些实际代码,并提供更多关于 Directory
是什么的上下文以及你想用它做什么。