我正在使用delayed_job运行数据提取,该数据提取使用包含Pundit授权的现有.html_erb模板,例如:
<%if policy(client).view_contacts? %>
通常Pundit会在控制器中寻找'current_user'方法来设置Pundit策略类。 但是我没有控制器,因为使用ActionView :: Base实例从ActiveJob运行作业来进行渲染。
我可以将所有政策调用更改为以下格式:
<%if ClientPolicy.new(my_current_user,client).view_contacts? %>
但是我更愿意使用Pundit
找到的'current_user'方法答案 0 :(得分:0)
我通过动态地包含Pundit并将current_user的attr_accessor添加到正在进行渲染的ActionView :: Base版本来解决这个问题。
@av = ActionView::Base.new(Rails.root.join('app', 'views'))
@av.class_eval do
include ApplicationHelper
include Pundit
attr_accessor :current_user #for pundit
end
@av.current_user=@user
现在,当从视图调用policy(client)方法时,它使用attr_accessor来获取当前用户。