Devise rails_admin,cancan未捕获重定向的拒绝访问异常
我正在使用rails 5、rails_admin、Desive和cancancan 一切正常,但当访问被拒绝时,会显示“您无权访问此页面”错误屏幕 我想重定向到根路径,我一直在搜索,我只发现我必须在app/controllers/application\u controller.rb中编写以下代码:Devise rails_admin,cancan未捕获重定向的拒绝访问异常,devise,ruby-on-rails-5,rails-admin,cancancan,Devise,Ruby On Rails 5,Rails Admin,Cancancan,我正在使用rails 5、rails_admin、Desive和cancancan 一切正常,但当访问被拒绝时,会显示“您无权访问此页面”错误屏幕 我想重定向到根路径,我一直在搜索,我只发现我必须在app/controllers/application\u controller.rb中编写以下代码: class ApplicationController < ActionController::Base rescue_from CanCan::AccessDenied do
class ApplicationController < ActionController::Base
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_path, :alert => exception.message
end
end
我看到越来越多的人问同样的问题,但他们都没有答案。我找到了一个有3个答案的答案,但我不理解公认的解决方案,因为它确实无法解释任何解决方案:
默认情况下,
ApplicationController
实际上不是RailsAdmin::MainController
的父级。因此,当RailsAdmin::MainController
抛出CanCan::AccessDenied
异常时,它实际上从未触及ApplicationController
,救援块也从未启动
在rails\u admin.rb
config块中,您可以显式地将ApplicationController
声明为RailsAdmin::MainController
config.parent_controller = 'ApplicationController'
您还可以通过扩展rails_admin控制器来实现这一点。这是monkey patching,但如果由于特定原因不想将父控制器设置为
ApplicationController
,则此功能非常有用
将以下内容添加到config/initializers/rails\u admin\u cancan.rb
文件中
require 'rails_admin/main_controller'
module RailsAdmin
class MainController < RailsAdmin::ApplicationController
rescue_from CanCan::AccessDenied do |exception|
flash[:alert] = 'Access denied.'
redirect_to main_app.root_path
end
end
end
需要“rails\u admin/main\u controller”
模块RailsAdmin
类MainController
是-也是我的解决方案。使用rails_admin(1.1.1)对我有效,我从0.8.0升级到了2.0.2。这个答案对我也有效。谢谢你这真是妙极了!接受的解决方案为rails admin的仪表板引发了拒绝访问错误,因为没有执行授权。也许bc我在我的应用程序\u控制器中有一个check\u授权,在特定的rails管理资源中有一个no load\u和\u authorize\u资源。尽管如此,你的建议还是奏效了。
config.parent_controller = 'ApplicationController'
require 'rails_admin/main_controller'
module RailsAdmin
class MainController < RailsAdmin::ApplicationController
rescue_from CanCan::AccessDenied do |exception|
flash[:alert] = 'Access denied.'
redirect_to main_app.root_path
end
end
end