问题描述
我是不熟悉ruby-on-rails的人,我正在寻找一种方法,让我的rails_admin仪表板只能由超级管理员用户访问。我发现rails_admin gem与另一个gem完全兼容:cancancan,用于管理授权。
我遵循了本指南:https://github.com/sferik/rails_admin/wiki/Cancancan来正确配置rails_admin,结果是:
config / initializers / rails_admin.rb :
RailsAdmin.config do |config|
# == Devise ==
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(&:current_user)
# == CancanCan ==
config.authorize_with :cancancan
config.actions do
dashboard # mandatory
index # mandatory
new
export
bulk_delete
show
edit
delete
show_in_app
end
end
app / models / ability.rb :
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
can :read,:all
if user.superadmin_role?
can :access,:rails_admin
can :read,:dashboard
can :manage,:all
elsif user.admin_role?
can :manage,:all
end
end
end
创建项目时,我跳过了活动记录。 目前,我制作的唯一支架是一个名为Product的类。
导航到localhost:3000 / admin时,我不断收到此错误:
NoMethodError in RailsAdmin::MainController#dashboard
undefined method `accessible_by' for Product:Class
我无法弄清楚在何处以及如何定义此“ accessible_by”方法。此外,我发现在该链接https://github.com/CanCanCommunity/cancancan/wiki/Fetching-Records上被告知,不使用活动记录需要模型适配器。
我在MacOS 11.15.6和:
上使用- 导轨6.0.2
- Rails_admin 2.0.2
- Cancancan 3.0.2
- Mongoid 7.0.5
有人可以帮助我了解我在做什么错吗? 谢谢:)
解决方法
好吧,我明白了!
我通过以下步骤解决了问题:
-
首先,如果当前正在运行,请停止
rails server
-
安装
cancancan-mongoid
gem。在cancancan gem的现有声明下,只需在您的Gemfile中键入gem 'cancancan-mongoid'
。然后运行bundle install
。 我提到了此页面:https://github.com/CanCanCommunity/cancancan-mongoid -
检查Gemfile中的宝石顺序如下:
mongoid
cancancan
cancancan-mongoid
rails_admin
前三个步骤应该可以解决问题,但是如果问题仍然存在,请继续执行最后一步:
- 创建一个名为
cancan_mongoid.rb
的新文件,并将其放在您的config/initializers
文件夹中,然后粘贴此处显示的完整代码:https://gist.github.com/bowsersenior/561639
这对我有用! :)