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

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

但是对于Pundit,没有这样的load_and_authorize_resource帮助方法.所有Pundit文档和教程都讨论了在每个操作中调用授权.我可以在每个动作中调用授权.但在ActiveAdmin中,默认情况下不会公开操作.我应该打开每个控制器中的每个动作,然后调用授权然后调用超级?

这似乎是错的.那么,有人可以告诉我如何使用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操作.

最佳答案 ActiveAdmin的主服务器现在包含一个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也可能有所帮助.

点赞