问题标签 [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.
ruby-on-rails - 使用 Pundit gem 授权一组 ID
我有一个 has_many 关联的多选框。参数如下:
使用强参数,我不允许这个属性,因为我想自己授权它,所以人们不能随便放任何他们想要的东西。
这种方法将迫使我找到所有的 foo,遍历它们,并单独授权每个。有没有更简单的方法来管理 has_many 授权,最好是使用 Pundit gem?
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 个解决此问题的方法,使其正常运行,但它们似乎都不合适:
- 利用视图中现有的@projects 变量,即:
policy(@projects[0])
- 向定义此实例变量的 projects#index 控制器操作添加一行,例如。
@project = Project.new
(或直接在类似于上面的视图中policy(Project.new)
:)
第一个解决方案将导致 @projects 数组中的相同错误为空,而第二个解决方案会创建冗余实例变量。所有策略助手需要知道的是我想在哪个类上强制执行授权逻辑。
关于实现它的正确方法的任何建议?
ruby-on-rails - 使用期望语法对权威人士进行 RSpec 测试
我正在尝试将以下规范转换为新的期望语法,有人可以帮忙吗?
我试过了,但它没有用,因为permit()
返回了一个匹配器—— RSpec::Matchers::DSL::Matcher
:
ruby-on-rails - 使用 pundit gem 时授权相关对象
如果我有用户对象并且用户有一个基本信息。在用户显示操作中,我有:
在 show.html.erb 我必须显示用户的基本信息,例如:
在这种情况下,我还应该在用户显示操作中授权 basicinfo 吗?
ruby-on-rails - 如何使用 Minitest 测试 Pundit 策略?
宝石文件
应用程序/控制器/application_controller.rb
应用程序/策略/application_policy.rb
应用/政策/book_policy.rb
应用程序/控制器/books_controller.rb
测试/工厂/factories.rb
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 类私有方法
和动作规则
不返回任何方法错误。
ruby-on-rails-3.2 - 在 Pundit 策略中访问会话参数
Pundit 策略似乎不访问会话参数。As 构造不会将会话重新识别为有效的变量或方法。有没有办法访问会话或其他参数?
ruby-on-rails - Rails 4 不完全支持 CanCan
Ryan Bates 似乎停止开发 CanCan。没有完全支持 Rails 4。而且,ready4rails4 说它不起作用。
我应该用另一个授权库替换 CanCan 吗?
问候
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
在模型中,我们可以随心所欲。
想法?
ruby-on-rails - 将 Pundit 与命名空间一起使用
在我的项目中,我有非常常见的命名空间“admin”。
我使用 Pundit gem 设置正确的授权,但我发现很难与命名空间中的控制器一起使用。我的政策组织如下
非常类似于控制器。
但是,当我在控制器内部使用“授权”方法时,我只得到一个错误,通知该应用程序“无法找到 UserPolicy”。我的 UserPolicy 看起来像这样:
那么问题是什么,我应该怎么做才能让 Pundit 在命名空间中看到这些策略?