问题标签 [pundit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1903 浏览

ruby-on-rails - 使用 Pundit gem 授权一组 ID

我有一个 has_many 关联的多选框。参数如下:

使用强参数,我不允许这个属性,因为我想自己授权它,所以人们不能随便放任何他们想要的东西。

这种方法将迫使我找到所有的 foo,遍历它们,并单独授权每个。有没有更简单的方法来管理 has_many 授权,最好是使用 Pundit gem?

0 投票
2 回答
8736 浏览

ruby-on-rails - 在没有可用实例变量的 Pundit 中使用策略助手

所以我决定尝试权威的用户授权解决方案。我想知道如何policy在实例变量可能为 nil 的情况下使用帮助程序,如下面的简单情况:

应用程序/视图/项目/index.html.slim

应用程序/控制器/projects_controller.rb

应用程序/策略/project_policy.rb

我想在 Projects#index 页面上显示“新项目”链接,但我在此视图中没有可用的 @project 实例变量,出现错误:

Pundit::NotDefinedError 项目#index

找不到政策 NilClassPolicy

显然出现错误是因为我确实传递@project了 nil 的实例变量,因此有一个 NilClass 显然我不需要授权。

我发现了 2 个解决此问题的方法,使其正常运行,但它们似乎都不合适:

  1. 利用视图中现有的@projects 变量,即:policy(@projects[0])
  2. 向定义此实例变量的 projects#index 控制器操作添加一行,例如。@project = Project.new(或直接在类似于上面的视图中policy(Project.new):)

第一个解决方案将导致 @projects 数组中的相同错误为空,而第二个解决方案会创建冗余实例变量。所有策略助手需要知道的是我想在哪个类上强制执行授权逻辑。

关于实现它的正确方法的任何建议?

0 投票
2 回答
1739 浏览

ruby-on-rails - 使用期望语法对权威人士进行 RSpec 测试

我正在尝试将以下规范转换为新的期望语法,有人可以帮忙吗?

我试过了,但它没有用,因为permit()返回了一个匹配器—— RSpec::Matchers::DSL::Matcher

0 投票
1 回答
617 浏览

ruby-on-rails - 使用 pundit gem 时授权相关对象

如果我有用户对象并且用户有一个基本信息。在用户显示操作中,我有:

在 show.html.erb 我必须显示用户的基本信息,例如:

在这种情况下,我还应该在用户显示操作中授权 basicinfo 吗?

0 投票
4 回答
3640 浏览

ruby-on-rails - 如何使用 Minitest 测试 Pundit 策略?

宝石文件

应用程序/控制器/application_controller.rb

应用程序/策略/application_policy.rb

应用/政策/book_policy.rb

应用程序/控制器/books_controller.rb

测试/工厂/factories.rb

0 投票
1 回答
515 浏览

ruby-on-rails-3 - rails3 Pundit 策略基于连接表值

用户 has_many 构造用户,后者是 has_many 的连接表:通过与 Construct 的关系。出于应用目的,布尔角色定义在连接表中(constructusers.manager、constructusers.operator 等),而 admin 是用户属性。

因此,当需要定义有关操作的策略时,以下会为“经理”引发无方法错误,而识别出关系 ActiveRecord::Relation:0x000001035c4370

如果关系(我假设是正确的)是正确的,为什么没有识别布尔属性?

根据下面的评论,原因很简单,就是复数。因此过滤需要:

...它在控制器中运行并影响视图。尽管如此,对于正确的 Pundit 处理,这需要被排除在外......仍然在前过滤器中 de application_controller 以设置该属性。但是,具有该查找条件的 before_filter :set_constructuser_manager 以及 nil 案例处理在说明策略时仍然没有影响

更新:根据下面的评论。Pundit 类私有方法

和动作规则

不返回任何方法错误。

0 投票
1 回答
2805 浏览

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

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

0 投票
1 回答
3274 浏览

ruby-on-rails - Rails 4 不完全支持 CanCan

Ryan Bates 似乎停止开发 CanCan。没有完全支持 Rails 4。而且,ready4rails4 说它不起作用。

我应该用另一个授权库替换 CanCan 吗?

问候

0 投票
1 回答
1673 浏览

ruby-on-rails - 为什么在 Pundit 中以不同方式处理面向“范围”的操作(尤其是“索引”操作)?

我写的是关于https://github.com/elabs/pundit#scopes

我的印象是授权应该回答您是否允许访问此资源的问题?,即一个true/false答案。除了 之外的所有操作都是这种情况index,根据 Pundit 的文档,它应该根据提问者返回不同ActiveRecord::Relation的 's。例如,管理员得到scope.all,而普通用户得到scope.where(:published => true).

应用/政策/post_policy.rb

应用程序/控制器/posts_controller.rb

我的保留是这是一个滑坡,很快我将向范围(例如)添加演示文稿——在授权策略scope.all.order('created_at ASC')中这样做感觉很奇怪。

当然,我可以将其移至控制器...

...但那是控制器的工作吗?而且我认为在视图中添加这样的调用是不正确的。所以也许它应该是一个模型方法?

你会说做以下事情的利弊是什么?

应用程序/控制器/posts_controller.rb

index与其他方法一样,一次调用authorize,一次调用模型方法。

应用/政策/post_policy.rb

这只是给出了一个真/假的答案。你有授权吗?是还是不是。

应用程序/模型/post.rb

在模型中,我们可以随心所欲。

想法?

0 投票
4 回答
5455 浏览

ruby-on-rails - 将 Pundit 与命名空间一起使用

在我的项目中,我有非常常见的命名空间“admin”。

我使用 Pundit gem 设置正确的授权,但我发现很难与命名空间中的控制器一起使用。我的政策组织如下

非常类似于控制器。

但是,当我在控制器内部使用“授权”方法时,我只得到一个错误,通知该应用程序“无法找到 UserPolicy”。我的 UserPolicy 看起来像这样:

那么问题是什么,我应该怎么做才能让 Pundit 在命名空间中看到这些策略?