4

使用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 操作。

4

1 回答 1

3

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

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


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

要检查的一个细节是您的 Pundit 策略定义了 ActiveAdmin 期望的方法。有一个模板可用作起点。ActiveAdmin授权文档也可能会有所帮助。

于 2014-05-06T18:09:28.457 回答