如何将rails控制器操作中的实例变量读取到权威策略中

时间:2015-03-04 13:21:03

标签: ruby-on-rails policy pundit

控制器显示动作

def show
   @batch = Batch.find(params[:id])
   @batch_id = @batch.id
   authorize @batch
end

权威政策

def show?
puts @batch_id
    if !current_user.nil? && (current_user.role?('Student')) ||  (current_user.role?('Administrator')) || (current_user.role?('SupportSpecialist')) || (current_user.role?('Instructor'))
      true
    else
      false
    end
  end

当我puts @batch_id时我得到的是什么,我怎样才能在政策行动中获得这个价值

1 个答案:

答案 0 :(得分:2)

你的控制器:

def show
  @batch = Batch.find(params[:id])
  @batch_id = @batch.id
  authorize @batch
end

您的政策文件可能是:

class BatchPolicy
  attr_reader :user, :record

  def initialize(user, record)
    @user = user
    @record = record
  end

  def show?
    true if record ...  // record will be equal @batch
  end  
end

如果您想要其他背景信息,那么您必须知道:

  

Pundit强烈建议您对应用程序进行建模,使得授权所需的唯一上下文是用户对象和要检查授权的域模型。如果您发现自己需要更多上下文,请考虑您是否正在授权正确的域模型,也许另一个域模型(或多个域模型的包装器)可以提供您需要的上下文。

     

由于这个原因,Pundit不允许您将其他参数传递给策略。

There你可以从马的嘴里了解它。