首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何读取rails控制器操作中的实例变量以验证策略

如何读取rails控制器操作中的实例变量以验证策略
EN

Stack Overflow用户
提问于 2015-03-04 13:21:03
回答 1查看 1.2K关注 0票数 3

控制器显示动作

代码语言:javascript
运行
复制
def show
   @batch = Batch.find(params[:id])
   @batch_id = @batch.id
   authorize @batch
end

专家政策

代码语言:javascript
运行
复制
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时,我得到的是零,我如何在政策行动中得到这个值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-04 13:50:33

你的控制器:

代码语言:javascript
运行
复制
def show
  @batch = Batch.find(params[:id])
  @batch_id = @batch.id
  authorize @batch
end

您的策略文件可能是:

代码语言:javascript
运行
复制
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

如果您需要额外的上下文,那么您必须知道:

专家强烈鼓励您对应用程序进行建模,使授权所需的唯一上下文是要检查授权的用户对象和域模型。如果您发现自己需要更多的上下文,请考虑是否授权正确的域模型,也许另一个域模型(或多个域模型的包装器)可以提供所需的上下文。 正是出于这个原因,专家不允许您向策略传递附加参数。

那里你可以从马的嘴里学到它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28855560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档