控制器显示动作
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
时我得到的是什么,我怎样才能在政策行动中获得这个价值
答案 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你可以从马的嘴里了解它。