安装并设置用户登录设备后,我继续添加了rails_admin gem。现在,如果我去localhost:3000 / admin我可以访问管理仪表板,但如何添加管理员身份验证,以便您需要输入管理员凭据才能访问管理仪表板?
答案 0 :(得分:1)
我建议您使用名为cancancan的授权gem(是cancan的更新版本),它非常易于使用,它可以让您为不同类型的用户提供某些权限。如果您对此宝石一无所知,我会建议您查看this railscasts,它将教您如何正确使用它。
所以在你在ability.rb文件中安装了cancancan gem后,你只需要做这样的事情来限制管理员访问
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user && 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
并且不要忘记告诉rails_admin gem您正在使用cancancan来验证授权
RailsAdmin.config do |config|
## == Cancan ==
config.authorize_with :cancan
end
要使用“user.admin?”您必须将其创建到用户模型中的方法,但只有当您拥有一个具有__用户和用户belongs_to角色的角色模型时才会起作用,否则您将需要其他方式来验证角色,因此它将是这样的
has_many :users
belongs_to :role
def admin?
role_id == 0 # If you have id == 0 for admin
end
我还建议您使用角色模型或枚举来轻松管理不同的角色。
我希望它有所帮助:D
答案 1 :(得分:0)
在routes.rb
authenticate :admin do
mount RailsAdmin::Engine => 'rails_admin', as: :rails_admin
end
答案 2 :(得分:0)
为用户提供管理员角色,以便您可以进行测试,例如user.admin?
。
配置rails_admin以从您的应用程序控制器继承并捕获除已登录的admin用户以外的任何访问权限。
#config/initializers/rails_admin.rb
RailsAdmin.config do |config|
...
config.parent_controller = 'ApplicationController'
config.authenticate_with do
# current_user = User.find_by_id(session[:user_id])
raise InvalidAdminAccess, 'Access denied.' unless current_user.try(:admin?)
end
end
在中定义InvalidAdminAccess
错误类
# app/errors/invalid_admin_access.rb
class InvalidAdminAccess < StandardError
end
在应用程序控制器中捕获错误
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
...
rescue_from InvalidAdminAccess do |exception|
respond_to do |format|
format.json { head :forbidden, content_type: 'text/html' }
format.html { redirect_to main_app.root_url, alert: exception.message }
format.js { head :forbidden, content_type: 'text/html' }
end
end
end
通过这种方式,当访问不正确时,rails_admin
会触发由应用程序控制器捕获并处理的异常。