devise - 具有cans的rails_admin无法捕获重定向的拒绝访问异常

标签 devise ruby-on-rails-5 rails-admin cancancan

我正在使用rails 5,rails_admin,devise和cancancan。

一切正常,但是当访问被拒绝时,它会显示“您无权访问此页面”错误屏幕。

我想重定向到root_path,我一直在搜索,但只发现我必须在app/controllers/application_controller.rb中编写以下代码:

class ApplicationController < ActionController::Base    
    rescue_from CanCan::AccessDenied do |exception|
        redirect_to root_path, :alert => exception.message
    end
end

我确实做到了,但是在未经授权的情况下,我仍然出现错误消息。它不会重定向。

我认为其余代码必须可以,因为它可以工作,但不能重定向到任何地方。
#config/initializers/rails_admin.rb
config.authorize_with :cancan
config.current_user_method(&:current_user)


#app/models/ability.rb
class Ability
    include CanCan::Ability

    def initialize(user)

    user ||= User.new # guest user (not logged in)
    if user.admin
        can :access, :rails_admin       # only allow admin users to access Rails Admin
        can :dashboard           
        can :manage, :all
    else
        can :read, :all                   # allow everyone to read everything
    end
  end
end

我看到更多的人问同样的问题,但是所有人都没有答案。我找到了一个有3个答案的人,但是我不明白被接受的解决方案,因为它实际上并没有解释任何解决方案:
Cancan + Devise rescue_from not catching exception

最佳答案

默认情况下,看来ApplicationController实际上不是RailsAdmin::MainController的父级。因此,当RailsAdmin::MainController抛出CanCan::AccessDenied异常时,它实际上不会触及ApplicationController,并且救援块也不会启动。

您可以使用以下命令在ApplicationController配置块中显式声明RailsAdmin::MainController作为rails_admin.rb的父项:

config.parent_controller = 'ApplicationController' 

关于devise - 具有cans的rails_admin无法捕获重定向的拒绝访问异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387657/

相关文章:

ruby-on-rails - 在设计中使用 Warden.authenticate 时无法更新参数

ruby-on-rails - 如何配置设备以接受电子邮件或用户名登录?

ruby-on-rails-3 - 使用 Omniauth (Rails + Devise) 创建帐户后设置密码

upgrade - Rails 5升级问题: database configuration does not specify adapter

ruby-on-rails-4 - rails_admin - 如何在 ListView 中按自定义字段排序

ruby-on-rails - 在 Rails 4 下设计 3 中的自定义用户字段

ruby-on-rails - 图片未在生产中显示

ruby-on-rails - Rails - 如何从 JSON Web key 获取公钥?

sql - 当同一模型上有多个联接时,RailsAdmin 过滤器不起作用

rails-admin - 与Rails_Admin集成时,是否可以将 "Edit HTML"按钮添加到bootstrap-wysihtml5中?