加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3.2 – 访问Pundit策略中的会话参数

发布时间:2020-12-17 04:20:54 所属栏目:百科 来源:网络整理
导读:看来Pundit策略不访问会话参数.由于构造不会将会话重新组合为有效的变量或方法.有没有办法访问会话或其他参数? class MyModelPolicy def create? @contructs = Construct.where(['id = ?',session[:construct_id]]).all endend 解决方法 我是Pundit的贡献者
看来Pundit策略不访问会话参数.由于构造不会将会话重新组合为有效的变量或方法.有没有办法访问会话或其他参数?
class MyModelPolicy
  def create?
    @contructs = Construct.where(['id = ?',session[:construct_id]]).all
  end
end

解决方法

我是Pundit的贡献者.默认情况下,策略只能访问当前用户和您正在检查权限的记录.

您可以使用context pattern defined in the Pundit docs.首先在app / model目录中创建一个用户上下文类,接受您需要的所有上下文参数,在本例中为session.

class UserContext
  attr_reader :user,:session

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

然后,您可以使用UserContext类的实例覆盖pundit使用的用户记录.

class ApplicationController
  include Pundit

  def pundit_user
    UserContext.new(current_user,session)
  end
end

通过使您的应用程序策略接受上下文来完成.如果您希望遵守旧策略,请将这些方法委派给上下文.

class ApplicationPolicy
  attr_reader :context,:user,:session

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

  delegate :user,to: :context
  delegate :session,to: :context

  ...

end

现在,您可以访问策略中的会话.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读