Ruby on rails 在Rails Pundit中是否可以使用单一方法授权多个控制器操作?
我创建了一个新的rails应用程序,我想根据限制用户操作,只有一个条件可以由所有者(创建者)和子所有者(添加者)编辑类似记录。我有像App、User和controller这样的模型,比如AppController。在AppController中,我有多个操作,如索引、创建、显示、更新和删除。我有一个类似AppPolicy的策略。在这里,我只需要创建一个方法来验证所有操作,但默认情况下,每个操作都需要另一个方法,如action\u name?在政策课上 范例 现行守则: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
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
授权如果用户无法执行给定的操作,则控制器中的code>方法将引发异常,因此在执行操作之前调用它
文档您可以使用cancan(或cancancan)gem
您可以使用创建能力配置文件
rails g cancan:ability
授权如果用户无法执行给定的操作,则控制器中的code>方法将引发异常,因此在执行操作之前调用它
文档我知道这是一个老问题,但我也遇到了同样的问题
我可以考虑两种解决方案:
解决方案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使用权威。