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