如何使用Pundit授权ActiveAdmin资源?

时间:2014-05-06 15:26:06

标签: ruby-on-rails activeadmin cancan pundit

使用CanCan,可以在全局load_and_authorize_resourcebefore_filter)中调用application_controller辅助方法。这将确保所有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操作。

1 个答案:

答案 0 :(得分:2)

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

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


在ActiveAdmin设置为使用Pundit授权适配器后,它会检查默认资源操作的授权:show,index,edit,update,new,create,destroy。任何自定义操作都必须手动授权。

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