加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – ActiveAdmin CanCanCan错误:受保护的方法`aut

发布时间:2020-12-17 02:54:32 所属栏目:百科 来源:网络整理
导读:我在使用ActiveAdmin与CanCanCan合作时遇到了一些麻烦.我在Rails 4应用程序中使用CanCanCan版本1.9.2和ActiveAdmin版本1.0.0.pre.通过向我的ApplicationController添加load_and_authorize_resource和check_authorization来设置我的能力类并在我的应用程序的
我在使用ActiveAdmin与CanCanCan合作时遇到了一些麻烦.我在Rails 4应用程序中使用CanCanCan版本1.9.2和ActiveAdmin版本1.0.0.pre.通过向我的ApplicationController添加load_and_authorize_resource和check_authorization来设置我的能力类并在我的应用程序的其余部分启用授权检查后,我收到错误

受保护的方法’授权!’呼叫#< Activeadmin ::< SomeControler>> (NoMethodError)

经过一番搜索,我遇到了this这个GitHub问题,看起来和我遇到的问题完全一样.但是,解决方案对我来说根本不起作用.在config / initializers / active_admin.rb中,我有以下内容:


config.authorization_adapter = ActiveAdmin :: CanCanAdapter

我还确保在任何ActiveAdmin控制器中都没有对controller.authorize_resource的引用,但我仍然可以获得受保护的方法授权! …当我尝试从集成测试中访问任何ActiveAdmin资源时出错.

经过一些试验和错误以及更多搜索之后,我发现不建议从ApplicationController调用load_and_authorize_resource,并且如上所述将ActiveAdmin的authorization_adapter设置为CanCanAdapter应该会自动启用CanAdCanCanCan在ActiveAdmin中的授权检查,但check_authorization失败,因为资源未经授权从ApplicationController中删除load_and_authorize_resource时为每个ActiveAdmin控制器.

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

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

解决方法

在深入研究代码后,我发现了正在发生的事情. ActiveAdmin和它的CanCanAdapter还不兼容CanCanCan的check_authorization方法.该方法依赖于授权方法在控制器上设置的@_authorized实例变量,但ActiveAdmin的授权不设置此变量.因此,即使ActiveAdmin IS执行授权,check_authorization也总是失败,因为ActiveAdmin没有设置此实例变量.我已经报告了这个问题,但现在的解决方法是在check_authorization中添加一个与所有ActiveAdmin控制器匹配的unless:子句.这会阻止check_authorization为这些控制器运行,但是,只要启用了CanCanAdapter,ActiveAdmin IS在响应资源之前仍会执行正确的授权.

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读