我正在使用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