【问题标题】:Activeadmin : undefined method `access_denied'Activeadmin:未定义的方法“access_denied”
【发布时间】:2017-11-09 13:12:22
【问题描述】:

我使用 Rails 5.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 的重定向进行良好的管理?

【问题讨论】:

  • 如果您注销然后访问与未经授权的访客用户相同的管理页面,是否一切正常(没有 500 错误)?

标签: ruby-on-rails devise activeadmin cancan


【解决方案1】:

由于您已将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 请求重定向到首页,JSON 请求返回 403 Forbidden 的示例:

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

如果您希望返回 403 Forbidden HTTP 代码,请创建一个 public/403.html 文件并将其呈现如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多