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

ruby-on-rails - 在 Pundit 中实施范围

我正在使用 Pundit gem(使用 Devise 和 Rolify)来限制对基于登录用户角色的信息的访问。

目前,我为我的用户模型定义了三个角色:管理员、客户管理员和客户管理员。

一个用户属于一个客户。客户 has_many 用户。

在索引Customer 模型时,我已成功实施 Pundit 策略。管理员和客户管理员可以查看所有客户。客户管理员只能看到他们自己的记录。

问题出在我试图限制Customer 控制器的show方法时。管理员和客户管理员可以查看所有客户。但是,客户管理员应该只能看到他自己的记录。 但就目前而言,客户管理员可以在 URL 中输入任何 id 并查看任何客户记录。

我对范围很模糊。据我了解,策略方法(即索引?和显示?)是限制谁可以执行这些操作,而范围方法限制可以获取哪些记录。我无法为上述场景构建正确的范围。

这是客户控制器:

这是客户政策:


成功!!感谢 railscard 给我的先机,诀窍是修改节目?客户策略文件中的方法,如下所示:

请注意,我必须使用@record 实例变量,因为这是应用程序策略类用来引用授权方法传入的记录的原因。

谢谢!!

0 投票
3 回答
1795 浏览

ruby-on-rails-4 - 具有命名空间的权威政策

我的应用程序中有问题模型。

应用程序/模型/question.rb

我正在使用“权威”宝石进行授权。有两个控制器可以对问题进行一些更改:一个用于注册用户,一个用于管理员。

我正在尝试为控制器创建单独的策略。

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

应用/政策/question_policy.rb

应用程序/控制器/管理员/questions_controller.rb

app/policies/admin/question_policy.rb

当我尝试在 Admin::QuestionsController 中使用“授权”方法时,它使用 app/policies/question_policy.rb 类而不是来自管理文件夹。

Gem 的文档说这应该像我上面描述的那样工作(https://github.com/elabs/pundit#namespaced-policies)。

有人可以帮我吗?

0 投票
2 回答
1882 浏览

ruby-on-rails - 使用服务对象的权威人士授权

工具

  1. 权威人士授权;尝试与官方 Pundit README 链接的这个拉取请求;
  2. ActiveInteraction域服务对象(“DSO”);
  3. RSpec 2.99.1

** 该项目**

项目 repo 在 Github;这里要审查的是在pundit-1树枝上。

我遵循 Pundit 教程并使用“传统”胖乎乎的控制器获得授权;看

到目前为止一切都很好。然后我们来到SessionController,其#new#destroy动作分别控制登录和注销..

当前代码规范使用传统的控制器逻辑工作得很好(请参阅如何#new调用使用 Pundit 的私有方法SessionDataPolicy来使用.

然后我尝试将该逻辑封装在ActiveInteraction DSO中(请参阅 中注释掉的代码SessionsController#new),然后一切都变得松散了。

更具体地说,这个 GistSessionsController中的规范版本在规范调用方法的地方提出了 a 。Pundit::AuthorizationNotPerformedError#new

威士忌酒。探戈。狐狸?!?!?

有没有能够在没有Pundit 直接居住在控制器代码中的情况下获得类似的代码,最好使用@billychan 的拉取请求(更好的替代品将不胜感激)?

这让我完全摸不着头脑。

0 投票
0 回答
168 浏览

ruby - 在 Rails 4 中将用户名登录添加到设计 - 创建用户时出错

遵循本指南后登录工作正常:允许用户使用他们的用户名或电子邮件地址登录

但是,创建新用户不再起作用。这就是我得到的:

我不知道为什么它不起作用。以下是设计中涉及的一些代码:

用户控制器.rb:

用户.rb:

我相信错误来自这种find_for_database_authentication方法

任何帮助是极大的赞赏。谢谢!

0 投票
1 回答
478 浏览

ruby-on-rails - 参数丢失或创建时值为空

我在用户和订阅模型之间有一对一的关系,使用 Stripe 进行支付,设计用户身份验证和 Pundit 角色。

当我从我的创建操作创建我的订阅模型时,我收到param is missing or the value is empty错误,因为我的表单没有传递 @subscription 对象。为什么我的@subscription 没有通过参数传递?

这是我的 SubscriptionsContrller 代码:

这是订阅模型:

以下是中的表单代码new.html.erb

最后,这是我的请求参数

0 投票
6 回答
6450 浏览

ruby-on-rails - 权威人士无头政策

我在我的应用程序的管理部分使用权威人士进行访问控制。我有一个仪表板控制器,如下所示:

和一个看起来像这样的政策:

当我尝试访问时,/admin/dashboards/我得到一个Pundit::NotDefinedError, unable to find policy SymbolPolicy for dashboards

我也尝试过命名策略并得到同样的错误。

0 投票
2 回答
752 浏览

ruby-on-rails - 使用 Pundit 策略防止 ActiveAdmin 登录

我有 ActiveAdmin 和 Pundit 设置和工作。我的用户模型有一个角色属性(rails 4.1 枚举)。如何只允许具有 admin 角色的用户登录 /admin?

0 投票
1 回答
195 浏览

ruby-on-rails - Rails Gem Pundit isn't blocking users properly

The current user i'm on isn't an admin, however when I hit the new action of the posts controller, I'm able to see it. Why is this? How do I use pundit properly?

From the rails console: 2.1.2 :011 > u.admin? => false

post_policy.rb:

end

posts_controller.rb:

posts/show.html.erb:

standard file printing out the contents of the post.

0 投票
1 回答
1333 浏览

ruby-on-rails - Rails 4 将 cancancan 迁移到 pundit

我正在尝试迁移到 Pundit,但遇到了一些麻烦。

我有一个用户模型和一个照片模型。

用户有很多照片,照片是用户的嵌套资源。在我的控制器中,我做

在我的康康舞能力课上,我有

在一个视图中我会使用

有人知道如何使用 Pundit 正确执行此操作吗?

先感谢您

0 投票
2 回答
5382 浏览

ruby-on-rails-4 - 设计“授权用户”导致未定义的方法

我从 RailsApps.org 的 Rails 4.1 Pundit / Devise 应用程序开始,并在用户控制器中调用“授权用户”时继续出现未定义的方法错误。用户可以注册、登录和编辑他们的帐户信息。单击“用户”链接时,会出现以下结果:

用户控制器中的 NoMethodError#index

未定义的方法“授权”#

这是用户控制器...

ApplicationController

关于如何解决这个问题的任何想法?

提前致谢!

评论:这是来自 RailsApp Pundit 快速入门指南来解释授权

关键字 authorize 是一个辅助方法,它为实现实际授权的较长语句提供了快捷方式。我们从来没有看到完整的语句,因为我们使用了 helper 方法,但如果我们使用它,它看起来像这样:

引发“未授权”,除非 UserPolicy.new(current_user, User).index?

授权助手方法找到一个 UserPolicy 类并实例化它,传递 current_user 对象和 User 类或 User 模型的实例,然后调用索引?方法返回真或假。您可能想知道为什么我们可以提供 User 类(如在 index 操作中)或 @user 实例变量(如在 show 操作中)。

当从控制器操作调用授权时,Pundit 会查找策略对象。我们已经看到,如果给定以下任何参数,Pundit 将找到 UserPolicy:

  • 授权用户 - 用户类

  • authorize @user – 一个实例变量,它是 User 类的一个实例

  • 授权用户——一个简单的变量,它是用户类的一个实例

  • 授权 @users – 一组用户对象

对我来说,似乎有时会在显示和更新中找到辅助方法,但在索引中却没有。