【问题标题】:How to authorize ActiveAdmin resources with Pundit?如何使用 Pundit 授权 ActiveAdmin 资源?
【发布时间】:2014-06-23 07:25:54
【问题描述】:

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

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

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

更新

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

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

【问题讨论】:

  • 对我来说这很容易。我已将 Pundit 模块包含到 ApplicationController,将 PunditAdapter 添加到 ActiveAdmin 配置并为所有模型创建策略。它就像一个魅力!

标签: ruby-on-rails activeadmin cancan pundit


【解决方案1】:

ActiveAdmin 的主服务器现在包含一个 Pundit 授权适配器。如果您使用 ActiveAdmin 的主分支,则可以轻松使用 Pundit。否则,您可以手动将现有的 pundit_adapter.rb 添加到旧版本的 ActiveAdmin,尽管可能需要做更多的工作。

有关如何添加适配器的更多上下文和详细信息,请参阅 ActiveAdmin PR #2857


ActiveAdmin 设置为使用 Pundit 授权适配器后,它会检查默认资源操作的授权:显示、索引、编辑、更新、新建、创建、销毁。任何自定义操作都必须手动授权。

要检查的一个细节是您的 Pundit 策略定义了 ActiveAdmin 期望的方法。有一个template 可用作起点。 ActiveAdmin authorization docs 也可能会有所帮助。

【讨论】:

  • 我已经将 Pundit 适配器设置为我的授权适配器。我已更新问题以添加更多信息。
  • ActiveAdmin 确实授权默认资源和页面操作。你有一个例子吗?你能更具体地谈谈这个问题吗?
  • 我刚刚尝试了一个完全普通的示例应用程序,只有 activeadmin、pundit 和一个模型。授权似乎一切正常。所以,我想我面临的问题是在我的应用程序中做的事情。需要检查它是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
相关资源
最近更新 更多