gpt4 book ai didi

ruby-on-rails - ActiveAdmin + CanCanCan 错误与 : protected method `authorize!' called for

转载 作者:行者123 更新时间:2023-12-04 03:41:05 27 4
gpt4 key购买 nike

我在让 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
...
我还确保我没有引用 controller.authorize_resource在任何 ActiveAdmin Controller 中,但我仍然得到 protected method authorize! ...当我尝试从我的集成测试访问任何 ActiveAdmin 资源时出错。

经过更多的尝试和错误以及更多的搜索,我发现调用 load_and_authorize_resource不推荐从 ApplicationController 中设置 ActiveAdmin 的 authorization_adapter 为 CanCanAdapter,就像我在上面所做的那样,应该会在 ActiveAdmin 中自动启用 CanCanCan 的授权检查,但是 check_authorization失败,因为在 load_and_authorize_resource 时资源未被授权给每个 ActiveAdmin Controller 从 ApplicationController 中删除。

那么,为我的 ActiveAdmin Controller 启用 CanCanCan 授权检查的正确方法是什么?我应该如何集成 CanCanCan 和 ActiveAdmin 以便非管理员用户无法访问任何 ActiveAdmin 资源?

我还发布了this向 ActiveAdmin 邮件列表提问,但没有收到任何回复。任何帮助将不胜感激。

最佳答案

在挖掘代码之后,我已经弄清楚发生了什么。 ActiveAdmin 及其 CanCanAdapter 尚不兼容 CanCanCan 的 check_authorization方法。该方法依赖于 @_authorized通过授权方法在 Controller 上设置实例变量,但 ActiveAdmin 的授权没有设置此变量。因此,即使 ActiveAdmin 正在执行授权,check_authorization总是失败,因为 ActiveAdmin 没有设置这个实例变量。我已报告此问题,但目前的解决方法是添加 unless: check_authorization 的子句匹配所有 ActiveAdmin Controller 。这停止 check_authorization从为这些 Controller 运行,但是,只要启用 CanCanAdapter,ActiveAdmin 在响应资源之前仍会执行适当的授权。

这是我添加到我的 ApplicationController 的解决方法,直到问题得到解决,如果它曾经是:

class ApplicationController < ActionController::Base
...
check_authorization unless: :activeadmin_resource?
...
private

def activeadmin_resource?
self.class.ancestors.include? ActiveAdmin::BaseController
end
end

关于ruby-on-rails - ActiveAdmin + CanCanCan 错误与 : protected method `authorize!' called for <Every ActiveAdmin Controller>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com