Ruby on rails Pundit:将特定资源授权给不同名称的控制器
假设我使用的是授权。我有以下控制器:Ruby on rails Pundit:将特定资源授权给不同名称的控制器,ruby-on-rails,ruby,pundit,Ruby On Rails,Ruby,Pundit,假设我使用的是授权。我有以下控制器: class BlogsController < ApplicationController before_action :check_authorization ... private def check_authorization authorize :blog end end 再说一次,没问题。Pundit查看资源的类,Blog,然后查找BlogPolicy类 示例:应用程序可以调用BlogPolicy#show?
class BlogsController < ApplicationController
before_action :check_authorization
...
private
def check_authorization
authorize :blog
end
end
再说一次,没问题。Pundit查看资源的类,Blog
,然后查找BlogPolicy
类
- 示例:应用程序可以调用
方法并传入BlogPolicy#show?
资源李>@blog
class SomeOtherBlogsController < ApplicationController
before_action :check_authorization
...
private
def check_authorization
authorize :some_other_blog, @blog
end
end
但是,调用该函数会引发一个
Pundit::AuthorizationNotPerformedError
。因此,与仅返回true
或false
相比,在authorize
方法中发生的事情似乎更多 您可以通过以下方式手动指定模型的资源类:
class Blog
def self.policy_class
SomeOtherBlogPolicy
end
end
不幸的是,在调用authorize
时,无法从控制器指定策略类
我最初写答案时是这样的。v2.00添加了一个策略\u类
选项以授权:
authorize(@blog, policy_class: SomeOtherBlogPolicy)
因此,不再需要原始答案中的解决方法。您可以通过以下方式手动指定模型的资源类:
class Blog
def self.policy_class
SomeOtherBlogPolicy
end
end
不幸的是,在调用authorize
时,无法从控制器指定策略类
我最初写答案时是这样的。v2.00添加了一个策略\u类
选项以授权:
authorize(@blog, policy_class: SomeOtherBlogPolicy)
因此,不再需要我原始答案中的解决方法。这现在是Pundit版本
2.0.0中的内置功能。
文档更新如下:
如有必要,可以传递参数以重写策略类。例如:
这现在是Pundit版本
2.0.0中的内置功能。
文档更新如下:
如有必要,可以传递参数以重写策略类。例如:
是否也可以覆盖视图中的策略类?我尝试这样做,但出现了一个错误
unknown关键字::policy\u class
<% if policy(@publication, policy_class: PublicationPolicy).create? %>
是否也可以覆盖视图中的策略类?我尝试这样做,但出现了一个错误
unknown关键字::policy\u class
<% if policy(@publication, policy_class: PublicationPolicy).create? %>
既然可以用“authorize@publication,policy”覆盖,既然可以用“authorize@publication,policy\u class:PublicationPolicy”覆盖,我不确定这是否能解决您的用例,但我做的一件事是:
。基本上:我将自定义策略放在ApplicationPolicy
中,它可以从我的所有其他策略中访问,因为它们都继承自ApplicationPolicy
。当然,问题是如果您的授权是基于实际的@发布记录的,那么这对您不起作用。我不确定这是否能解决您的用例,但我做的一件事是:
。基本上:我将自定义策略放在ApplicationPolicy
中,它可以从我的所有其他策略中访问,因为它们都继承自ApplicationPolicy
。当然,问题是,如果您的授权基于实际的@出版物
记录,那么这将不适用于您。