ruby-on-rails - 红色 Rails 屏幕而不是闪烁消息:RailsAdmin::MainController#dashboard 中的 CanCan::AccessDenied
问题描述
我使用设计、CanCanCan 和 rails_admin。有了可访问性,一切都很好,但我没有收到一条消息并重定向到 root_path 并得到下面的屏幕。有什么想法,提示我如何获得闪存消息而不是这个?其他闪烁消息,警报和通知均显示 OK。非常感谢。
我的应用程序控制器是:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user!
def after_sign_in_path_for(resource)
stored_location_for(resource) || welcome_path_url
end
rescue_from CanCan::AccessDenied do |exception|
respond_to do |format|
format.json { head :forbidden, content_type: 'text/html' }
format.html { redirect_to main_app.root_url, notice: exception.message }
format.js { head :forbidden, content_type: 'text/html' }
end
end
end
rails_admin.rb
RailsAdmin.config do |config|
### Popular gems integration
## == Devise ==
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(&:current_user)
## == CancanCan ==
# config.authorize_with :cancancan
config.authorize_with do
redirect_to main_app.root_path unless current_user.superuser ==true
end
<....>
end
能力.rb
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
#
user ||= User.new # guest user (not logged in)
if user.superuser?
can :manage, :all
cannot :access, :rails_admin
cannot :manage, :dashboard
end
if user.office?
cannot :access, :rails_admin
cannot :manage, :dashboard
can :read, :all
end
end
end
编辑:工作答案已标记。我也应该像这样定义状态变量:
def status
@user_role ||= User.new(read_attribute(:user_role))
end
在我的User
模型中。
解决方案
推荐阅读
- windows - 使用 Golang 获取用户名和域
- python - 如何使用分类器预测句子中每个单词的概率标签
- android - 即使观察到的变量改变了一次,观察者也会被触发两次
- angular - 导航无法响应 HttpClient
- multithreading - 回调是否序列化到 DriverKit 驱动程序?
- pdf - 无法让 Ghostscript "viewraw.ps" 或 "viewrgb.ps" 程序工作(加扰输出)
- user-interface - Ue4 - 手机卡牌游戏 - 抽牌问题
- python - pytest.mark.parametrize 中的可选参数
- git - 将文件添加到 Git 存储库
- c - 链接 Discord C SDK 且不显示任何日志时应用程序崩溃