You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Active Admin生产环境下如何限制后台路由访问

问题描述

我开发了一个支持带图片文章发布功能的常规Rails应用,引入Active Admin作为后台管理员来管理文章。该应用仅存在后台管理员用户,无其他用户,请问如何限制后台路由,让普通访客无法访问?

当前后台路由列表

new_admin_user_session GET        /admin/login(.:format)                                                                            active_admin/devise/sessions#new
                  admin_user_session POST       /admin/login(.:format)                                                                            active_admin/devise/sessions#create
          destroy_admin_user_session DELETE|GET /admin/logout(.:format)                                                                           active_admin/devise/sessions#destroy
             new_admin_user_password GET        /admin/password/new(.:format)                                                                     active_admin/devise/passwords#new
            edit_admin_user_password GET        /admin/password/edit(.:format)                                                                    active_admin/devise/passwords#edit
                 admin_user_password PATCH      /admin/password(.:format)                                                                         active_admin/devise/passwords#update
                                     PUT        /admin/password(.:format)                                                                         active_admin/devise/passwords#update
                                     POST       /admin/password(.:format)                                                                         active_admin/devise/passwords#create
                          admin_root GET        /admin(.:format)                                                                                  admin/dashboard#index
      batch_action_admin_admin_users POST       /admin/admin_users/batch_action(.:format)                                                         admin/admin_users#batch_action
                   admin_admin_users GET        /admin/admin_users(.:format)                                                                      admin/admin_users#index
                                     POST       /admin/admin_users(.:format)                                                                      admin/admin_users#create
                new_admin_admin_user GET        /admin/admin_users/new(.:format)                                                                  admin/admin_users#new
               edit_admin_admin_user GET        /admin/admin_users/:id/edit(.:format)                                                             admin/admin_users#edit
                    admin_admin_user GET        /admin/admin_users/:id(.:format)                                                                  admin/admin_users#show
                                     PATCH      /admin/admin_users/:id(.:format)                                                                  admin/admin_users#update
                                     PUT        /admin/admin_users/:id(.:format)                                                                  admin/admin_users#update
                                     DELETE     /admin/admin_users/:id(.:format)                                                                  admin/admin_users#destroy
         batch_action_admin_articles POST       /admin/articles/batch_action(.:format)                                                            admin/articles#batch_action
                      admin_articles GET        /admin/articles(.:format)                                                                         admin/articles#index
                                     POST       /admin/articles(.:format)                                                                         admin/articles#create
                   new_admin_article GET        /admin/articles/new(.:format)                                                                     admin/articles#new
                  edit_admin_article GET        /admin/articles/:id/edit(.:format)                                                                admin/articles#edit
                       admin_article GET        /admin/articles/:id(.:format)                                                                     admin/articles#show
                                     PATCH      /admin/articles/:id(.:format)                                                                     admin/articles#update
                                     PUT        /admin/articles/:id(.:format)                                                                     admin/articles#update
                                     DELETE     /admin/articles/:id(.:format)                                                                     admin/articles#destroy
                     admin_dashboard GET        /admin/dashboard(.:format)                                                                        admin/dashboard#index
                      admin_comments GET        /admin/comments(.:format)                                                                         admin/comments#index
                                     POST       /admin/comments(.:format)                                                                         admin/comments#create
解决方案

方法1:全局配置Active Admin认证

Active Admin默认集成Devise做身份验证,只需确保全局配置启用认证规则。编辑config/initializers/active_admin.rb:

ActiveAdmin.setup do |config|
  # 保留原有其他配置,添加或修改以下内容
  config.authentication_method = :authenticate_admin_user!
  config.current_user_method = :current_admin_user
  config.logout_link_path = :destroy_admin_user_session_path
  config.logout_link_method = :get
end

配置完成后,所有后台路由都会强制要求管理员登录,未登录用户访问时会自动跳转到/admin/login页面。

方法2:自定义基控制器(可选,细粒度控制)

如果需要对部分后台资源做特殊验证,可以创建统一的基控制器处理认证:

  1. 创建文件app/controllers/admin/base_controller.rb:
class Admin::BaseController < ActiveAdmin::BaseController
  before_action :authenticate_admin_user!
end
  1. 在Active Admin资源配置中指定继承该基控制器,比如app/admin/articles.rb:
ActiveAdmin.register Article do
  controller do
    inherit_resources
    belongs_to :admin_base_controller
  end
  # 其他文章管理配置...
end

验证效果与管理员用户创建

  1. 重启Rails服务器后,直接访问任何后台路由(如/admin/articles),会被重定向到登录页。
  2. 若还没有管理员用户,可通过Rails控制台创建:
AdminUser.create!(email: 'admin@yourdomain.com', password: 'your_secure_password', password_confirmation: 'your_secure_password')

内容的提问来源于stack exchange,提问作者user19707340

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:40:14