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

View File

@@ -7,6 +7,7 @@ from .catalog import router as catalog_router
from .claude import router as claude_router
from .gemini import router as gemini_router
from .models import router as models_router
from .modules import router as modules_router
from .openai import router as openai_router
from .system_catalog import router as system_catalog_router
@@ -19,5 +20,6 @@ router.include_router(gemini_router, tags=["Gemini API"])
router.include_router(system_catalog_router, tags=["System Catalog"])
router.include_router(catalog_router)
router.include_router(capabilities_router)
router.include_router(modules_router)
__all__ = ["router"]

46
src/api/public/modules.py Normal file
View File

@@ -0,0 +1,46 @@
"""公开模块状态 API供登录页等使用"""
from typing import List
from fastapi import APIRouter, Depends
from pydantic import BaseModel
from sqlalchemy.orm import Session
from src.core.modules import ModuleCategory, get_module_registry
from src.database import get_db
router = APIRouter(prefix="/api/modules", tags=["Modules"])
class AuthModuleInfo(BaseModel):
"""认证模块简要信息"""
name: str
display_name: str
active: bool
@router.get("/auth-status", response_model=List[AuthModuleInfo])
async def get_auth_modules_status(db: Session = Depends(get_db)):
"""
获取认证模块状态(公开接口)
供登录页使用,返回所有可用的认证模块及其激活状态。
不需要认证即可访问。
**返回字段**:
- `name`: 模块名称
- `display_name`: 显示名称
- `active`: 是否激活
"""
registry = get_module_registry()
auth_modules = registry.get_auth_modules_status(db)
return [
AuthModuleInfo(
name=status.name,
display_name=status.display_name,
active=status.active,
)
for status in auth_modules
]