访问 Pundit 策略中的会话参数

2024-03-18

看来 Pundit 策略不访问会话参数。 As 构造不将会话识别为有效的变量或方法。有什么方法可以访问会话或其他参数吗?

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

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

您可以使用Pundit 文档中定义的上下文模式 https://github.com/elabs/pundit#additional-context。首先在您的应用程序中创建一个用户上下文类app/model在本例中,目录接受您需要的所有上下文参数session.

class UserContext
  attr_reader :user, :session

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

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

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在您的政策内。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问 Pundit 策略中的会话参数 的相关文章

随机推荐

  • 将(可选)参数传递给 HTTP 参数(Python、请求)

    我目前正在开发 API 包装器 并且在将参数从函数传递到请求的有效负载中时遇到问题 参数可以是 blockId senderId recipientId limit offset orderBy 所有参数均通过 OR 连接 一个可能的解决方
  • 在 Rails 中使用 Turbolinks link_to

    只是想知道是否有一种方法可以直接在 Rails link to 帮助程序中使用 Turbolinks 快速的谷歌搜索没有发现任何值得注意的东西 这是我尝试过但无济于事的类型 我知道你可以通过像这样的常规链接来做到这一点 a href gir
  • 为什么使用 twitter bootstrap 的多模式会出现过多递归错误?

    我尝试在另一个模态中包含一个模态 但是 我收到了类似的错误too much recursion在火狐浏览器中 我使用了最新的 jQuery 和 Twitter bootstrap 但仍然有这个问题 这里是plunker http plnkr
  • Windows 服务托管 TCP WCF 服务

    我正在尝试在 Windows 2008 R2 服务器上托管 WCF 服务作为 Windows 服务 我按照 msdn 提供的指示进行操作 在这里找到 http msdn microsoft com en us library ff64981
  • 如何在不创建用户帐户的情况下只允许每人(电脑/手机)对网站上的 1 个帖子投 1 票?

    在学习 Meteor 框架的过程中 我正在将 Yik Yak 移动应用程序重新创建为 Web 应用程序 但该应用程序是完全匿名的 没有用户帐户 但您仍然只能对帖子投赞成票或反对票一次 如何使这项工作有效 您想要的可能不仅仅需要 JavaSc
  • 网格视图数据绑定事件

    如何使用网格视图的数据绑定事件以及如何调用它有人可以详细说明一下吗 我像这样在按钮上绑定 gridview DataTable dt placedStudentManager GetPlacedStudentList sb passoutY
  • set.pop() 是确定性的吗?

    我知道 python 集合的元素是没有顺序的 调用pop方法返回任意元素 我对此很满意 我想知道当集合具有相同的历史记录时 pop 是否总是返回相同的元素 当然 在一个版本的 python 中 我不介意 python 的不同版本 实现是否做
  • 在 Android 密钥库中存储 hmac 密钥

    我使用下面的代码创建 hmac 密钥并将其作为字符串返回 KeyGenerator keyGen null try keyGen KeyGenerator getInstance HmacSHA256 catch NoSuchAlgorit
  • 如何使用目标接口将编译选项添加到 CMake FetchContent 依赖项

    我有一个使用 CMake 的依赖项FetchContent需要使用一些构建标志来构建 cmake DFLAG ON 这个问题也被问到here https stackoverflow com questions 68708076 how to
  • 在 Elastic Beanstalk 上运行 .config 文件?

    我正在尝试在我的弹性豆茎上运行自定义 config 文件 我正在按照以下说明进行操作这个链接 http www tonmoygoswami com 2013 05 how to enable gzip on amazon elastic h
  • 在 C# 中使用 RSA

    如何在 C 中使用 RSA 加密技术加密文本或任何其他媒体 我需要使用任何外部库还是有任何内置的东西 一个小示例代码会有所帮助 Use 系统 安全 加密 RSACryptoServiceProvider http msdn microsof
  • OpenShift action_hooks 不可执行

    当我在 OpenShift 中创建测试 DIY 应用程序时 action hooks工作正常 但现在我创建了一个实际的应用程序 当我推送更改时它们不会触发 我做了一些调查 发现了问题 由于某种原因 操作挂钩无法执行 我检查过 它们在测试应用
  • 在 C# 中无法获得与 Python 中相同的哈希值

    我有一个字符串 需要对其进行哈希处理才能访问 API API 创建者在 Python 中提供了一个 codenippet 它对代码进行哈希处理 如下所示 hashed string hashlib sha1 string to hash h
  • 定义 Netfilter 挂钩函数的正确方法是什么?

    我正在编写一个内核模块 更具体地说 一个网络过滤器模块 适用于 Linux 我试图使其与各种内核兼容 但入口功能给我带来了麻烦 从 LXR 中 我可以看到nf hookfntypedef 在内核 3 13 中发生了变化 Linux 3 12
  • PHP:将字符串中的前导零连接到个位数

    我有这个示例字符串 hello77boss2america 9 22 fr99ee 9 应在字符串的所有个位数前面添加前导 0 结果应该是 hello77boss02america 09 22 fr99ee 09 我尝试了下面的代码 str
  • 更改 Google Maps JavaScript API v3 圈外的地图不透明度

    所以我目前在地图上画了一个圆圈 var optionsCercle center latlang map map radius 1000 fillOpacity 0 1 strokeWeight 0 this circ new google
  • 如何将数据从活动传递到正在运行的服务

    我想定期向服务器发送数据 我正在使用后台Service为此 但我想在数据更新时发送 并且我正在获取更新的数据Activity和Service在后台运行 那么我如何将数据传递给运行Service from Activity Using Int
  • 如何在地图图钉注释中显示图像?

    我有一个视图 gt gt 子视图 mkmapview in that i want to show image my current image is like this 我想这样展示 我怎样才能做到这一点 我如何在此注释中添加图像 您正在
  • itertool 和 multiprocessing,如何并行生成所有可能的组合

    我有以下代码 它生成产生给定总和 n 的所有可能组合 然而 对于大数字 n 此代码需要很长时间 有没有办法可以跨多个处理器并行化我的代码 from itertools import combinations with replacement
  • 访问 Pundit 策略中的会话参数

    看来 Pundit 策略不访问会话参数 As 构造不将会话识别为有效的变量或方法 有什么方法可以访问会话或其他参数吗 class MyModelPolicy def create contructs Construct where id s