feat: 实现功能模块系统,支持模块的动态注册与启用控制

- 新增 ModuleRegistry 核心,支持模块注册、可用性检查和启用状态管理
- 新增模块管理 API(管理端和公共端),提供模块状态查询和启用控制
- 将 LDAP 功能迁移到模块系统,支持通过环境变量和数据库配置控制
- 前端新增模块管理页面和 store,支持模块启用/禁用操作
- 路由守卫集成模块状态检查,未激活模块的页面自动重定向
- 面包屑导航支持模块配置页面的层级显示
- Switch 组件新增 disabled 属性支持
This commit is contained in:
fawney19
2026-01-16 16:14:12 +08:00
parent 50343d5459
commit 6c98816f9f
17 changed files with 1332 additions and 39 deletions

19
src/modules/__init__.py Normal file
View File

@@ -0,0 +1,19 @@
"""
功能模块注册
所有可选功能模块在此注册
"""
from typing import List
from src.core.modules.base import ModuleDefinition
# 导入所有模块定义
from src.modules.ldap import ldap_module
# 所有模块列表
ALL_MODULES: List[ModuleDefinition] = [
ldap_module,
]
__all__ = ["ALL_MODULES"]

View File

@@ -0,0 +1,50 @@
"""
LDAP 认证模块
提供 LDAP/Active Directory 用户认证支持
"""
from src.core.modules.base import (
ModuleCategory,
ModuleDefinition,
ModuleHealth,
ModuleMetadata,
)
def _get_router():
"""延迟导入路由(避免启动时加载重依赖)"""
from src.api.admin.ldap import router
return router
async def _health_check() -> ModuleHealth:
"""健康检查 - 简化版,不依赖数据库连接"""
# 健康检查在启动时调用,此时可能没有数据库会话
# 返回 UNKNOWN 表示需要进一步检查
return ModuleHealth.UNKNOWN
# LDAP 模块定义
ldap_module = ModuleDefinition(
metadata=ModuleMetadata(
name="ldap",
display_name="LDAP 认证",
description="支持通过 LDAP/Active Directory 进行用户认证",
category=ModuleCategory.AUTH,
# 可用性控制
env_key="LDAP_AVAILABLE",
default_available=True,
required_packages=["ldap3"],
# 路由配置(使用现有路由,不改变路径)
api_prefix="/api/admin/ldap",
# 前端配置
admin_route="/admin/ldap",
admin_menu_icon="Users",
admin_menu_group="system",
admin_menu_order=50,
),
router_factory=_get_router,
health_check=_health_check,
)