首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问Pundit策略中的会话参数

访问Pundit策略中的会话参数
EN

Stack Overflow用户
提问于 2013-12-04 05:51:18
回答 1查看 2.8K关注 0票数 11

Pundit策略似乎不访问会话参数。As构造不会将会话识别为有效的变量或方法。有没有办法访问会话或其他参数?

代码语言:javascript
复制
class MyModelPolicy
  def create?
    @contructs = Construct.where(['id = ?', session[:construct_id]]).all
  end
end
EN

回答 1

Stack Overflow用户

发布于 2015-01-15 21:58:08

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

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

代码语言:javascript
复制
class UserContext
  attr_reader :user, :session

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

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

代码语言:javascript
复制
class ApplicationController
  include Pundit

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

最后,让您的应用程序策略接受上下文。如果您想保持与旧策略的兼容,请将这些方法委托给上下文。

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

现在,您可以在策略中访问session

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

https://stackoverflow.com/questions/20362459

复制
相关文章

相似问题

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