2

控制器显示动作

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如何才能在政策行动中获得该价值

4

1 回答 1

3

你的控制器:

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 不允许您将其他参数传递给策略。

在那里你可以从马的嘴里了解到它。

于 2015-03-04T13:50:33.867 回答