问题标签 [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 回答
15121 浏览

ruby-on-rails-4 - 如何使用权威范围?

我刚刚从 CanCan 切换到 Pundit。我不确定几件事,以及如何最好地使用 Pundit。

例如:

如果您有一个可以有多个父对象的资源,例如,假设一个目标属于学生和教师。因此,一个学生可以有很多目标,而一个教师可以有很多目标。在控制器索引操作中,您可能会这样做:

params在策略内部不可用,因此需要在此处完成逻辑。我认为。据我所知,如果您跳过目标,policy_scope您将在查看目标索引页面时收到未经授权的错误。

你会:

或者

当您将一堆包含在混合中时会发生什么?

或者在需要订购时......这是正确的吗?

使用范围时::scope这里有什么?是否:scope正在评估模型的实例?我试过通过 访问它的属性:scope,但没有用。

0 投票
2 回答
4180 浏览

ruby-on-rails - user.admin 在哪里?在 rails-devise-pundit 入门应用程序中定义?

我使用RailsApps rails-composer创建了一个 rails-devise-pundit 入门应用程序。我对 ruby​​ on rails 还是有点陌生​​,对设计、专家和 rails 4 也比较陌生。

我正在查看代码以了解它是如何工作的。控制器和策略类中有很多地方 user.admin? 叫做。但是找不到管理员?方法。我希望它在 User 模型中,但它不存在。这是用户类:

在部分 users_controller.rb 中使用:

权威人士或设计者是否以某种方式创建了这种方法?我已经看到它在权威文档中使用,但它只是将其用作示例。它并没有说需要创建方法或处理它。是否以某种方式使用具有 :admin 作为可能值的角色枚举?如果有人能解释这是如何工作的,我将不胜感激。

我计划很快添加使用 rolify gem 来处理角色,而不是用户类中的角色枚举。也许出于某种原因,我想要制作完全不同的角色名称。我想确保我了解如何保持一切正常。谢谢。

0 投票
1 回答
397 浏览

ruby-on-rails - 为什么我的 Pundit Policy minitest 测试用例没有使用 rake 测试运行?

我正在使用 Rails 4.1 和 Pundit gem。我为我的 UserPolicy 类创建了一个 UserPolicyTest 类。但是当我运行 rake test 时,类中的所有测试都没有运行。我也在尝试使用迷你测试。我找不到任何关于父类应该是什么的文档。我也尝试过扩展 MiniTest::Unit:TestCase 但这也不起作用。下面是 test/policies 文件夹中的测试类。名称是 user_policy_test.rb。我删除了文件中的一些测试以节省空间。

0 投票
1 回答
989 浏览

ruby-on-rails-4 - 为什么我的枚举值在使用 Pundit gem 的 minitest 中是错误的?

我使用rails- devise-pundit示例应用程序从 RailsApps 创建了一个入门应用程序。我正在尝试编写一个用户控制器测试,因为我计划更改一些功能并且我想确保事情仍然有效。专家 UserPolicy 没有返回基于 User 类中角色枚举的正确值。UserPolicy.index? 当从 UsersControllerTest 中的第一个测试调用时,下面看到的方法返回 false。抱歉,这里有很多代码和细节。我希望每个人都可以跟随它。

这是 UsersControllersTest 中的失败测试。响应是 :redirect 而不是 :success。

这是我的用户控制器类,只是显示了我的问题所在的索引方法。authorize @users应该调用该UserPolicy.index?方法。

我的专家用户策略类。当我更改index?方法使其返回 true 时,我的 UsersControllerTest 中的响应是:成功。所以由于某种原因@user.admin?没有返回正确的值。

更奇怪的是,我创建了一个 UserPolicyTest 类,当我index?从那里测试调用时,我得到了正确的响应。此测试正常工作:

这是我的用户模型:

这是我的管理员用户测试夹具:

我发现在夹具中设置角色不起作用。我猜这是因为after_initialize :set_default_role, :if => :new_record?我的用户模型中的行。如果有其他原因或更好的方法来处理这个问题,请告诉我。

更新:也许这是由强参数引起的。当我尝试使用 pry 调试代码时,我发现在 UsersControllerTest 中,登录后,管理员用户的角色为 2,这是正确的。但是当它到达 User.Policy.index? 时,角色为 0。我可能需要将角色字段添加到设计强参数中。不久前我看到了一些关于如何做到这一点的东西。看起来并不容易。如果有人在我得到答案之前知道答案,请告诉我。

0 投票
3 回答
1857 浏览

ruby-on-rails - Rails - 使用 Pundit 的基于角色的视图

我正在使用 Devise 和 Pundit 创建一个应用程序来创建用户并为他们分配角色。

有了这个,我想在我的应用程序中拥有基于角色的视图。我很难思考如何使这成为可能。

当你登录时,如果你是一个user你应该重定向到user主视图。如果你是一个manager你应该重定向到一个manager主视图。

在高层次上,编写该逻辑的最佳方式是什么?如果它存在于控制器、视图中,或许可以利用部分来保持干燥......

任何提示表示赞赏。

0 投票
1 回答
1834 浏览

ruby-on-rails - 使用 gem pundit,为什么帖子的作者无法在 Ruby on Rails 4.0.2 中编辑或删除它?

我是使用ruby1.9.3 和rails4.0.2 和pundit0.2.1的新手

后模型包括:

用户模型是使用devisegem 生成的(并且没有has_many :posts

我做到了rake db:drop db:create db:migrate,我schema.rb现在user_idposts桌子上。

然后我跟着这个博客使用 gempundit

我的代码与该博客中显示的代码完全相同。此外,我将此添加到我的后控制器操作中:

我没有收到任何错误(NoMethodError就像我使用cancangem 时遇到的那样)。

但是没有用户,甚至帖子的作者,都不能编辑和销毁他的帖子。

它只是显示 Couldn't find post。(这是来自的警报消息rescue_from Pundit::NotAuthorizedError

我尝试在博客文章中的方法中更改逻辑,PostPolicy owned但没有奏效。

有了这些模型和模式,我怎样才能在不使用任何 gem 的情况下实现这个简单的授权(只有帖子的作者应该能够编辑和删除他的帖子)?

我在这里尝试了其他类似的问题,但没有一个对我有用。

由于我的授权正在发挥作用,现在我正在努力专门定制viewsedit链接destroy帖子index.html.erb

只有帖子的作者必须显示其帖子的编辑和删除链接。

我遵循elabs/pundit使用策略方法自定义视图。

这是我的代码post_policy.rb

这是帖子中的代码index.html.erb

根据elabs/punditpolicy上的权威文档,它说我们可以通过 和 中的方法policy获取的实例。viewcontroller

对我来说,它给了NoMethodError in Posts#indexundefined method user_id for <Class:0x22d64d8>

我在帖子中有 user_id 字段。我想我需要通过@post 获取该user_id 的策略。我尝试了其他方法但没有成功。

0 投票
2 回答
646 浏览

ruby-on-rails - 如何使用 Pundit 处理分页?

我刚刚开始在 Rails 4 应用程序中使用 Pundit gem 进行授权。

一切都很好,但我可以了解分页在索引操作中的工作方式。

我的控制器的索引操作如下所示:

我的 RecordPolicy 中的 Scope 类然后去:

这一切都很好。我想知道我将如何处理分页。当然,这涉及传入页面参数等,我不确定如何在不继承 Scope 类的情况下执行此操作。

0 投票
1 回答
2720 浏览

ruby-on-rails - Rails Pundit Rspec 测试

我在使用 Rspec 测试 Pundit 策略范围时遇到了障碍。基本上,我正在尝试测试范围上的返回值是否严格限于用户。所以我循环浏览为用户返回的所有问题,并确保 id 等于用户。

这是绿色的,但是当它是一个非公民角色时它会失败,因为 Scope 调用只返回一个问题对象。这没什么大不了的,因为每个角色都有一个 .where() 的作用域,但这是一种代码味道,我可能做错了什么。

我有一个执行操作的 IssueController

要在 rspec 中进行测试,我必须这样做

0 投票
1 回答
1097 浏览

twitter-bootstrap - 错误:将生成器与 Pundit 一起使用时未初始化的常量 WillPaginate::ActionView (NameError)

我的应用程序使用的是 CanCan,但现在我想切换到 Pundit。我将 Pundit 添加到 Gemfile,删除了 CanCan,然后运行bundle,然后在尝试运行生成器 ( rails g pundit:install) 时出现错误:

这是我的 application_controller.rb 文件:

这是引导链接渲染器:

0 投票
2 回答
3413 浏览

ruby-on-rails - 从设计注册新视图/控制器为用户设置 Pundit 角色

我有 Pundit 和 Devise 设置并在我的 rails 应用程序中正常工作。但是我不确定如何让用户在注册时决定他们的角色。

眼下:

  • 我有一个 URL 参数,它传递给设计新视图。
  • 在 form_for 中,我将一个名为 role 的隐藏字段设置为参数的值。

这行得通。

但我担心恶意用户可能会将此参数更改为“管理员”,现在他们是管理员。

我该如何处理?我不想在模型中设置限制,因为这会在我想创建管理员时引起问题。我应该覆盖设计注册控制器以在那里进行检查吗?