我在让 ActiveAdmin 与 CanCanCan 一起工作时遇到了一些麻烦。我在 Rails 4 应用程序中使用 CanCanCan 版本 1.9.2 和 ActiveAdmin 版本 1.0.0.pre。load_and_authorize_resource
在我的应用程序的其余部分通过添加和添加到我的 ApplicationController设置我的能力类并启用授权检查后check_authorization
,我收到错误
protected method 'authorize!' called for #<Activeadmin::<SomeControler>> (NoMethodError)
经过一番搜索,我遇到了这个GitHub 问题,看起来与我遇到的问题一模一样。但是,该解决方案对我根本不起作用。在 config/initializers/active_admin.rb 我有,除其他外:
...
config.authorization_adapter = ActiveAdmin::CanCanAdapter
...
我还确保我在任何 ActiveAdmin 控制器中都没有引用,但是当我尝试从我的集成测试访问任何 ActiveAdmin 资源时controller.authorize_resource
,我仍然得到错误。protected method authorize! ...
经过更多的尝试和错误以及更多的搜索,我发现load_and_authorize_resource
不建议从 ApplicationController 调用,并且像我上面所做的那样将 ActiveAdmin 的 authorization_adapter 设置为 CanCanAdapter 应该会自动在 ActiveAdmin 中启用 CanCanCan 的授权检查,但check_authorization
由于资源未被授权而失败ActiveAdmin 控制器何时load_and_authorize_resource
从 ApplicationController 中删除。
那么,为我的 ActiveAdmin 控制器启用 CanCanCan 授权检查的正确方法是什么?我应该如何集成 CanCanCan 和 ActiveAdmin 以便非管理员用户无法访问任何 ActiveAdmin 资源?
我还将这个问题发布到 ActiveAdmin 邮件列表,但没有得到任何回复。任何帮助将不胜感激。