如何阻止我网站上的用户访问 Rails_admin 面板 URL?

How can I block a user on my website from going to Rails_admin panel URL?

当用户试图通过 URL 访问时,如何阻止 Rails_admin 面板 URL 并将用户重定向到主页?我可以从 routes.rb 开始吗?

我刚刚安装了 Rails_admin gem 并在 routes.rb 文件中添加了路由。 我可以在 routes.rb 文件中设置条件以不允许用户访问而只允许管理员访问吗? 这是我去 Rails_admin 的路线 mount RailsAdmin::Engine => '/admin', as: 'rails_admin'

他们的 docs describe 这个用例:

Authorization can be added using the authorize_with method. If you pass a block it will be triggered through a before_action on every action in Rails Admin.

RailsAdmin.config do |config|
  config.authorize_with do
    redirect_to main_app.root_path unless current_user.is_admin?
  end
end

这个设置在config/initializers/rails_admin.rb

进一步说明

如文档中所述,这会在 every RailsAdmin 操作之前使用传递的块触发 before_action 调用。你可以这样想象

before_action :authorize_admin

def authorize_admin
  redirect_to main_app.root_path unless current_user.is_admin?
end

这类似于向您的 ApplicationController 添加一个 before_action 触发器 - 只是它会自动仅通过 RailsAdmin 操作触发。

只需将此代码添加到您的 appication_controller.rb 文件中即可。

 RailsAdmin.config do |config|
  config.authorize_with do 
    if current_user.nil?
      redirect_to main_app.root_path
    else
      redirect_to main_app.root_path unless current_user.admin?
    end
  end
 end

这将在用户未登录或用户 public 时重定向页面。