Activeadmin:未定义的方法“access_denied”

Activeadmin : undefined method `access_denied'

我用的是rails5.0 康康舞 1.6.10 设计 4.2.0 活跃管理员

我经常在 newrelic 中遇到这个错误:

NoMethodError: undefined method `access_denied' for #<Admin::FollowupsController:0x007f112917d270>

在 active_admin.rb 中,我在配置中设置:access_denied:

  config.on_unauthorized_access = :access_denied

如何消除此错误并很好地管理 access_denied 而不是 500 的重定向?

由于您已将 ActiveAdmin 配置为对未经授权的访问使用 :access_denied 方法,因此您需要在 application_controller.rb 中定义此方法并将用户从他们没有的页面重定向访问他们有权访问的资源的权限。您也可以在浏览器中显示错误消息。典型例子:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def access_denied(exception)
    redirect_to admin_root_path, alert: exception.message
  end
end

HTML 请求重定向到主页和 returning 403 Forbidden JSON 请求的示例:

def access_denied(exception)
  respond_to do |format|
    format.json { head :forbidden, content_type: 'text/html' }
    format.html { redirect_to main_app.root_url, notice: exception.message }
  end
end

如果您更喜欢 return 403 禁止访问的 HTTP 代码,请创建一个 public/403.html 文件并像这样呈现它:

def access_denied(exception)
  render file: Rails.root.join('public', '403.html'), 
         status: 403, 
         layout: false
end