Ruby on rails 在Rails Pundit中是否可以使用单一方法授权多个控制器操作?

Ruby on rails 在Rails Pundit中是否可以使用单一方法授权多个控制器操作?,ruby-on-rails,pundit,Ruby On Rails,Pundit,我创建了一个新的rails应用程序,我想根据限制用户操作,只有一个条件可以由所有者(创建者)和子所有者(添加者)编辑类似记录。我有像App、User和controller这样的模型,比如AppController。在AppController中,我有多个操作,如索引、创建、显示、更新和删除。我有一个类似AppPolicy的策略。在这里,我只需要创建一个方法来验证所有操作,但默认情况下,每个操作都需要另一个方法,如action\u name?在政策课上 范例 现行守则: class AppPoli

我创建了一个新的rails应用程序,我想根据限制用户操作,只有一个条件可以由所有者(创建者)和子所有者(添加者)编辑类似记录。我有像App、User和controller这样的模型,比如AppController。在AppController中,我有多个操作,如索引、创建、显示、更新和删除。我有一个类似AppPolicy的策略。在这里,我只需要创建一个方法来验证所有操作,但默认情况下,每个操作都需要另一个方法,如action\u name?在政策课上

范例

现行守则:

class AppPolicy < ApplicationPolicy
  class Scope < Scope
    def resolve
     scope
   end
 end

 def action1?
  record.users.include? (user)
 end

 def action2?
  record.users.include? (user)
 end

 def action3?
   record.users.include? (user)
 end

end
class AppPolicy
从上面的代码中,我们可以看到所有方法中都存在相同的条件。我只需要使用一种方法来验证action1、action2和action3。我不知道这在权威中是否可行

您可以使用cancan(或cancancan)gem

您可以使用创建能力配置文件

rails g cancan:ability
授权方法将引发异常,因此在执行操作之前调用它

文档

您可以使用cancan(或cancancan)gem

您可以使用创建能力配置文件

rails g cancan:ability
授权方法将引发异常,因此在执行操作之前调用它


文档

我知道这是一个老问题,但我也遇到了同样的问题

我可以考虑两种解决方案:

解决方案1 当您知道所有可以调用的操作时

您可以使用
define\u方法
,如下所示

[:action1?, :action2?].each do |m|
  define_method(m) { record.users.include? (user) }
end
解决方案2 当你不知道所有的动作。(这可能很危险)

您可以结合使用
方法\u missing
响应\u missing
。后者是必需的,因为在调用策略的相应方法之前,pundit将在内部调用
respond_to
。 例如:


我知道这是个老问题,但我也有同样的问题

我可以考虑两种解决方案:

解决方案1 当您知道所有可以调用的操作时

您可以使用
define\u方法
,如下所示

[:action1?, :action2?].each do |m|
  define_method(m) { record.users.include? (user) }
end
解决方案2 当你不知道所有的动作。(这可能很危险)

您可以结合使用
方法\u missing
响应\u missing
。后者是必需的,因为在调用策略的相应方法之前,pundit将在内部调用
respond_to
。 例如:


这个建议几乎没有意义,甚至没有答案,因为OP使用权威。这个建议几乎没有意义,甚至没有答案,因为OP使用权威。