如何在没有控制器的情况下将current_user告诉Pundit

时间:2015-10-22 00:49:55

标签: ruby-on-rails pundit

我正在使用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'方法

1 个答案:

答案 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来获取当前用户。