在Pundit策略中访问会话参数

 我思故我在 发布于 2023-02-13 09:29

看来Pundit策略不访问会话参数.由于构造不会将会话重新组合为有效的变量或方法.有没有办法访问会话或其他参数?

class MyModelPolicy
  def create?
    @contructs = Construct.where(['id = ?', session[:construct_id]]).all
  end
end

zeeraw.. 20

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

您可以使用Pundit文档中定义的上下文模式.首先在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

现在您可以访问session您的政策.

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

    您可以使用Pundit文档中定义的上下文模式.首先在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
    

    现在您可以访问session您的政策.

    2023-02-13 09:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有