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

ruby-on-rails - 如何解决我的后控制器中的“无方法错误”。设计、权威、博客应用程序

在尝试为我的练习应用程序设置策略时。我在我的帖子控制器中遇到了“无方法错误”。

如果我们在后控制器上归零,我的更新方法就是代码。

结尾

正如你所看到的,没有什么特别的。只是更新页面的 HTML 和 JSON 呈现。

authorize代码指向 pundit 中查找访问策略的助手。

在我的 Admin.rb 模型中定义。

authorize代码查找与方法名称对应的策略。它查看策略类并开始应用此处找到的业务规则。这就是问题开始的地方。

我去def update? @admin.editor? end

它说undefined method 'editor?' for #<Class:0x007ffb7fa4f6a0>

代码位于 Git 的策略分支上:https ://github.com/wmuengineer/portfolio/tree/policy

0 投票
2 回答
356 浏览

ruby-on-rails - Rails:从任何 ruby​​ 类将内容记录到 rails 应用程序日志

我希望能够从 ruby​​ 类将内容记录到 Rail 的应用程序日志中。

我希望logger.info "some stuff"从 中的一个类做my_app/app/myClass.rb,但它没有定义。当我logger在我的控制器和其他地方使用它时,它可以工作。

我对 Rails / Ruby 有点陌生,我假设这仅仅是因为logger该类不包含在 中myClass.rb,但它自动包含在所有控制器、模型等中。

如何logger在任意 ruby​​ 类中包含该类,或者从 ruby​​ 类登录到我的 rails 应用程序?

(为“Pundit”添加了标签,因为我特别在 Pundit 策略文件中使用记录器,但它只是一个 ruby​​ 类:P)

0 投票
2 回答
2754 浏览

ruby-on-rails - 用户模型错误 - Rails

以下是我的 user.rb:

我现在想要生成权威人士特定的东西,当我尝试这样做时,我收到以下错误消息:

通常,当我不使用 ActiveRecord 作为基础时会发生这种情况,但这里不是这种情况。有任何想法吗?

0 投票
1 回答
5002 浏览

ruby-on-rails - 如何使用 Pundit 授权 ActiveAdmin 资源?

使用CanCan,可以在全局(在)load_and_authorize_resource中调用辅助方法。这将确保所有 ActiveAdmin 控制器操作也得到固有的授权。before_filterapplication_controller

但是Pundit,没有这样的load_and_authorize_resource辅助方法。所有 Pundit 文档和教程都在讨论调用authorize每个操作。我可以在每个动作中调用授权。但在 ActiveAdmin 中,默认情况下不会公开这些操作。我是否应该打开每个控制器中的每个操作,authorize然后调用然后调用super

这似乎是错误的。那么,有人可以告诉我如何使用 Pundit 来授权 ActiveAdmin 中的操作吗?

更新

我知道 Pundit 授权适配器。我正在使用 AA 的主分支,并且我已将 AA 配置为使用 Pundit 适配器,如此所述。我的问题是:如何使用适配器?通过设置config.authorization_adapter = ActiveAdmin::PunditAdapter,是否会自动调用 ActiveAdmin 中每个操作的授权?我不这么认为。

例如,在 CanCan 中,即使在设置之后config.authorization_adapter = ActiveAdmin::CanCanAdapter,您仍然需要将其设置load_and_authorize_resource为全局 before_filter 才能自动授权所有 AA 操作。

0 投票
0 回答
268 浏览

ruby-on-rails - rescue_from DeviseLdapAuthenticatable::LdapException 似乎不起作用

我已经设计并LdapAuthenticatable配置为访问OpenLdap服务器以验证用户身份。

它通常可以工作,但是当服务器关闭时,rescue_from调用ApplicationController似乎不起作用。

当我得到

Rails 通过以下方式提升到非托管页面:

Devise::SessionsController#create 中的 Errno::EHOSTUNREACH 没有到主机的路由 - “slackdap.nellinux.net”端口 389 的连接(2)

Rails.root:/home/archivi/home/src/ruby/rails/tests/rails

应用程序跟踪 | 框架跟踪 | 完整跟踪请求

参数:

{"utf8"=>"✓", "authenticity_token"=>"mdFadH/41En8CXizTIu086ouO4BNXrISCmcNLE86LFw=", "user"=>{"email"=>"foo.bar@example.net", "password"=>"[过滤]"}, "提交"=>"登录"}

在这里,我的应用程序控制器:

有什么建议吗?

谢谢

0 投票
2 回答
3825 浏览

ruby-on-rails - 为什么 before_action :authorize 因“参数数量错误”而失败?

我已将 Pundit 与 Devise 一起设置为对我的应用程序进行授权。在我的一个控制器中,我有before_action :authorize.

然后我有以下测试:

我收到错误:

登录助手相当简单:

更新: 堆栈跟踪:

0 投票
0 回答
828 浏览

ruby-on-rails - has_many 关系中的权威人士授权

我在执行权威人士授权的最后一步时遇到了一些麻烦......我有一个项目模型以及一个 project_policy,它授权应用程序中的哪些用户可以查看该项目并与之交互。但是,我的项目有几个组件 - 其中一个是在项目中访问的项目版本的索引(项目 has_many 版本)......所以我还需要能够限制用户访问这个版本列表。 ..以及默认的项目配置文件(如果用户不是所有者/管理员或合作者,我会限制)。但是,我目前有这些“版本”,它们是在他们自己的模型中设置的。

详细信息:目前,如果我不是管理员/所有者或合作者,当我尝试访问 url projects/20 时,限制会起作用(它会重定向我并说“你没有被授权”),但如果我导航到“项目” /20/versions' 或 'projects/20/versions/1' 或 'projects/20/versions/new' 它不会限制我。我需要为此创建一个新的 version_policy,还是我可以在 project_policy 中限制它,因为从技术上讲,这些版本是项目的一部分?& 我需要添加的代码是什么样的?

我的代码如下 - 在此先感谢您提供的所有帮助...

PROJECT_POLICY.RB

PROJECT.RB(项目模型)

PROJECTS_CONTROLLER.RB

路线.RB

非常感谢......让我知道我错过的任何其他内容是否会有所帮助。

0 投票
1 回答
328 浏览

ruby-on-rails - 如何使用 pundit 显示基于 auth 的特定参数?

假设我有一个User具有 ausername和 a的模型full_name。我想渲染一个用户对象,Active Model Serializer并且只根据它current_user是 nil 还是登录来渲染特定的参数。由于我也在使用pundit,我想知道是否有办法使用pundit.

例如

用户是nil

用户是logged in

0 投票
2 回答
612 浏览

ruby-on-rails - Rails:使用专家定义策略,取决于用户访问的页面

我在两页中需要相同的部分导轨,显示帖子列表。第一个是新闻提要页面,第二个是“详细信息”页面。

在第一个中,用户不应该能够编辑,在第二个中他应该能够。

部分是这样的:

该政策是这样实施的:

但似乎我无法访问 method current_page?。有没有办法从政策中知道我正在访问的实际页面是什么?

谢谢

0 投票
1 回答
172 浏览

ruby-on-rails - 基于每个客户的授权策略

我有一个 Rails 4 应用程序。我使用devise进行身份验证,使用oppro为我的 API 提供 oauth2。所有请求都通过权威政策授权,直到现在,这个设置完全没问题。

目前,我的授权始终基于每个用户完成。这是有道理的,因为通常每个请求都是代表特定用户完成的,该用户要么在会话中进行身份验证,要么提供 oauth-token。

新的挑战是:我有某些 API 消费者(从现在开始我称他们为设备),他们的请求不能被视为来自特定用户的请求。一种是可以与 API 交换信息的Asterisk Server,另一种是GPS Tracking Box,它不断将跟踪点推送到 API。

因此,我需要在每个设备的基础上授权某些 API 操作,这意味着不一定有current_user可用的。但是没有current_user搞砸我的授权概念。

我已经考虑了解决这个问题的几种方法:

  • 为每个设备创建专用用户并授权他们执行特定操作
    • 亲:不会搞砸我的授权计划
    • 对比:意味着重新考虑User-Model,因为目前我只有需要姓名、生日、电子邮件等的“自然用户”
  • 使用经过调整的授权方案创建专用控制器
    • 亲:高灵活性
    • 相反:
      • 所需设备的身份验证
      • 需要额外的 API 端点,感觉不是很干燥

我正在为这种情况寻找最佳实践方法。我相信这不是一个特别的问题,并且必须有很好的解决方案。