问题标签 [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-4 - 如何使用权威范围?
我刚刚从 CanCan 切换到 Pundit。我不确定几件事,以及如何最好地使用 Pundit。
例如:
如果您有一个可以有多个父对象的资源,例如,假设一个目标属于学生和教师。因此,一个学生可以有很多目标,而一个教师可以有很多目标。在控制器索引操作中,您可能会这样做:
params
在策略内部不可用,因此需要在此处完成逻辑。我认为。据我所知,如果您跳过目标,policy_scope
您将在查看目标索引页面时收到未经授权的错误。
你会:
或者
当您将一堆包含在混合中时会发生什么?
或者在需要订购时......这是正确的吗?
使用范围时::scope
这里有什么?是否:scope
正在评估模型的实例?我试过通过 访问它的属性:scope
,但没有用。
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 来处理角色,而不是用户类中的角色枚举。也许出于某种原因,我想要制作完全不同的角色名称。我想确保我了解如何保持一切正常。谢谢。
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。我删除了文件中的一些测试以节省空间。
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。我可能需要将角色字段添加到设计强参数中。不久前我看到了一些关于如何做到这一点的东西。看起来并不容易。如果有人在我得到答案之前知道答案,请告诉我。
ruby-on-rails - Rails - 使用 Pundit 的基于角色的视图
我正在使用 Devise 和 Pundit 创建一个应用程序来创建用户并为他们分配角色。
有了这个,我想在我的应用程序中拥有基于角色的视图。我很难思考如何使这成为可能。
当你登录时,如果你是一个user
你应该重定向到user
主视图。如果你是一个manager
你应该重定向到一个manager
主视图。
在高层次上,编写该逻辑的最佳方式是什么?如果它存在于控制器、视图中,或许可以利用部分来保持干燥......
任何提示表示赞赏。
ruby-on-rails - 使用 gem pundit,为什么帖子的作者无法在 Ruby on Rails 4.0.2 中编辑或删除它?
我是使用ruby
1.9.3 和rails
4.0.2 和pundit
0.2.1的新手
后模型包括:
用户模型是使用devise
gem 生成的(并且没有has_many :posts
)
我做到了rake db:drop db:create db:migrate
,我schema.rb
现在user_id
在posts
桌子上。
然后我跟着这个博客使用 gempundit
我的代码与该博客中显示的代码完全相同。此外,我将此添加到我的后控制器操作中:
我没有收到任何错误(NoMethodError
就像我使用cancan
gem 时遇到的那样)。
但是没有用户,甚至帖子的作者,都不能编辑和销毁他的帖子。
它只是显示 Couldn't find post
。(这是来自的警报消息rescue_from
Pundit::NotAuthorizedError
)
我尝试在博客文章中的方法中更改逻辑,PostPolicy
owned
但没有奏效。
有了这些模型和模式,我怎样才能在不使用任何 gem 的情况下实现这个简单的授权(只有帖子的作者应该能够编辑和删除他的帖子)?
我在这里尝试了其他类似的问题,但没有一个对我有用。
由于我的授权正在发挥作用,现在我正在努力专门定制views
和edit
链接destroy
帖子index.html.erb
只有帖子的作者必须显示其帖子的编辑和删除链接。
我遵循elabs/pundit使用策略方法自定义视图。
这是我的代码post_policy.rb
这是帖子中的代码index.html.erb
根据elabs/punditpolicy
上的权威文档,它说我们可以通过 和 中的方法policy
获取的实例。view
controller
对我来说,它给了NoMethodError in Posts#index
和undefined method user_id for <Class:0x22d64d8>
我在帖子中有 user_id 字段。我想我需要通过@post 获取该user_id 的策略。我尝试了其他方法但没有成功。
ruby-on-rails - 如何使用 Pundit 处理分页?
我刚刚开始在 Rails 4 应用程序中使用 Pundit gem 进行授权。
一切都很好,但我可以了解分页在索引操作中的工作方式。
我的控制器的索引操作如下所示:
我的 RecordPolicy 中的 Scope 类然后去:
这一切都很好。我想知道我将如何处理分页。当然,这涉及传入页面参数等,我不确定如何在不继承 Scope 类的情况下执行此操作。
ruby-on-rails - Rails Pundit Rspec 测试
我在使用 Rspec 测试 Pundit 策略范围时遇到了障碍。基本上,我正在尝试测试范围上的返回值是否严格限于用户。所以我循环浏览为用户返回的所有问题,并确保 id 等于用户。
这是绿色的,但是当它是一个非公民角色时它会失败,因为 Scope 调用只返回一个问题对象。这没什么大不了的,因为每个角色都有一个 .where() 的作用域,但这是一种代码味道,我可能做错了什么。
我有一个执行操作的 IssueController
要在 rspec 中进行测试,我必须这样做
twitter-bootstrap - 错误:将生成器与 Pundit 一起使用时未初始化的常量 WillPaginate::ActionView (NameError)
我的应用程序使用的是 CanCan,但现在我想切换到 Pundit。我将 Pundit 添加到 Gemfile,删除了 CanCan,然后运行bundle
,然后在尝试运行生成器 ( rails g pundit:install
) 时出现错误:
这是我的 application_controller.rb 文件:
这是引导链接渲染器:
ruby-on-rails - 从设计注册新视图/控制器为用户设置 Pundit 角色
我有 Pundit 和 Devise 设置并在我的 rails 应用程序中正常工作。但是我不确定如何让用户在注册时决定他们的角色。
眼下:
- 我有一个 URL 参数,它传递给设计新视图。
- 在 form_for 中,我将一个名为 role 的隐藏字段设置为参数的值。
这行得通。
但我担心恶意用户可能会将此参数更改为“管理员”,现在他们是管理员。
我该如何处理?我不想在模型中设置限制,因为这会在我想创建管理员时引起问题。我应该覆盖设计注册控制器以在那里进行检查吗?