- Add libs/api/admin with admin API endpoints: sync models, workspace credit, billing alert check - Add workspace_alert_config model and alert service - Add Session::no_op() for background tasks without user context - Add admin/ Next.js admin panel (AI models, billing, workspaces, audit) - Start billing alert background task every 30 minutes
16 KiB
Admin 后台管理系统 — ROADMAP
最后更新: 2026-04-19 (v26) — ROADMAP.md Rust依赖表更新:平台会话管理 ✅、审计增强 ✅ 与 PLAN.md 一致;剩余仅平台用户SSO/SAML(Rust) + 多租户(架构);41 tests 通过
本文档基于
C:\工作\code\libs代码库分析,规划 Admin 系统的演进路线。
1. 技术背景
1.1 双应用架构
┌─────────────────────────────────────────────────────────┐
│ PostgreSQL (同一数据库) │
└─────────────────────────────────────────────────────────┘
│ │
┌─────┴──────┐ ┌──────┴──────┐
│ Rust 主应用 │ │ Next.js Admin │
│ (libs/api) │ │ (自包含) │
│ Actix-web │ │ Route API │
│ libs/svc │ │ libs/rbac │
└────────────┘ └──────────────┘
1.2 libs/ 代码库结构
| Crate | 职责 | 与 Admin 的关联 |
|---|---|---|
libs/api |
Actix-web HTTP 路由层 | Admin 可通过 /api/agents/* 等接口间接调用 |
libs/service |
业务逻辑层 | Workspace 计费/AI 模型同步等核心逻辑所在 |
libs/models |
SeaORM 实体定义 | Admin DB 查询直接引用相同表结构 |
libs/session |
会话管理(Redis) | 主应用使用 session:user_uid:*,Admin 使用 admin:session:* |
libs/db |
数据库连接池 | Admin 直接复用 DATABASE_URL |
libs/agent |
AI Agent(聊天/Review/Summary/ReAct) | Admin 可触发 sync_upstream_models() |
libs/queue |
异步队列(Redis PubSub) | Email 队列等 |
libs/email |
SMTP 发送 | 审计通知等 |
1.3 关键 API 路由(主应用 Rust)
Workspace 计费(libs/api/workspace/billing.rs):
GET /api/workspaces/{slug}/billing— 当前余额/配额GET /api/workspaces/{slug}/billing/history— 账单历史POST /api/workspaces/{slug}/billing/add-credit— 充值(需要 workspace 成员权限)
AI 模型管理(libs/api/agent/):
GET/POST /api/agents/providers— Provider CRUDGET/POST /api/agents/models— Model CRUDGET/POST /api/agents/versions— 版本管理POST /api/agents/versions/{id}/pricing— 定价设置POST /api/agents/models/{id}/sync— 同步上游模型POST /api/agents/code-review/{ns}/{repo}— 触发 Code ReviewPOST /api/agents/pr-description/{ns}/{repo}— 触发 PR Summary
Project(libs/api/project/):
GET/POST /api/projects/{namespace}/{name}— Project CRUDGET /api/projects/{namespace}/{name}/billing— 项目级计费
其他:
libs/service/agent/sync.rs—sync_upstream_models()从 OpenRouter 同步模型libs/service/agent/billing.rs—record_ai_usage()记录 token 消耗并扣费
2. 功能路线图
Phase 1: 补全当前功能(短期)
基于现有 libs/api 直接可调用接口,快速实现。
[x] Workspace 计费操作(充值/调整配额)✅
现状: 已实现(直接写 DB)
POST /api/platform/workspaces/{id}/add-credit— 充值 API(INSERT billing_history + UPDATE billing.balance,事务保护)/admin/workspaces/[id]/page.tsx— 充值弹窗(输入金额+备注,充值后自动刷新)- 说明: 直接写 DB,绕过 Rust service 层(事务内保证原子性)
[x] AI 模型同步触发器 ✅
现状: 已完成
libs/api/admin/sync.rs—POST /api/admin/ai/sync(x-admin-api-key认证)libs/service/agent/sync.rs::sync_upstream_models— 已直接调用src/app/api/platform/ai/sync/route.ts— Admin 前端 API 路由(调用 Rust)src/app/admin/ai/page.tsx— "同步 OpenRouter 模型"按钮 + 结果反馈- 环境变量:
RUST_BACKEND_URL+ADMIN_API_SHARED_KEY
Phase 2: 平台级管控能力(中期)
[x] 仓库(Repository)管理视图 ✅
现状: 已实现
/admin/repos/page.tsx— 仓库列表(分页/搜索/仓库名/项目/可见性/协作者数/分支数/AI Review 状态)GET /api/platform/repos— 仓库列表 API
[x] 房间(Room)管理视图 ✅
现状: 已实现
/admin/rooms/page.tsx— 房间列表(按项目筛选/搜索/成员数/消息数/最后活跃)/admin/rooms/[id]/page.tsx— 房间消息详情(消息列表/撤回操作)GET /api/platform/rooms— 房间列表 APIGET /api/platform/rooms/[id]/messages— 房间消息 APIDELETE /api/platform/rooms/[id]/messages/[msgId]— 撤回消息(admin session 认证)
[x] 项目(Project)管理视图 ✅
现状: 已实现
/admin/projects/page.tsx— 项目列表(分页/搜索/workspace 筛选/可见性筛选)/admin/projects/[id]/page.tsx— 项目详情(成员/账单历史)/api/admin/projects/route.ts— 项目列表 API/api/admin/projects/[id]/route.ts— 项目详情 API 现状: Workspace 下有项目,但 Admin 无项目列表
新增:
/admin/projects/page.tsx— 项目列表(分页/搜索/workspace 筛选)/admin/projects/[id]/page.tsx— 项目详情(成员/账单/仓库)
[x] 平台用户会话管理 ✅
现状: 已实现
/platform/sessions/page.tsx— 扫描session:user_uid:*Redis 前缀- 按用户分组显示(用户名/UID/IP/UserAgent/登录时间)
- 单会话下线 / 用户全部下线
/api/platform/sessions/route.ts— 平台会话 API- RBAC:
platform:read(GET) /platform:manage(DELETE)
[x] 审计日志导出(CSV/Excel) ✅
现状: 已实现
GET /api/logs?format=csv— 导出 CSV(含当前筛选条件,最多 10,000 条)/admin/logs/page.tsx— "导出 CSV" 按钮,自动携带当前筛选参数
[x] 批量操作 ✅
现状: 已实现
- 平台用户:批量启用/禁用(
PATCH /api/platform/users,更新user_password.is_active) - Workspace:批量调整计划(
PATCH /api/platform/workspaces,UPDATEworkspace.plan) - 全选/反选/已选计数 UI
Phase 3: 安全与合规(中期)
[x] Admin API 令牌 ✅
现状: 已实现
src/lib/api-token.ts— Token 生成(SHA-256 哈希)、验证、创建、删除admin_api_token表(id, name, token_hash, token_prefix, permissions, created_by, expires_at, last_used_at, is_active)POST /api/api-tokens— 创建 Token(返回明文,仅此一次)GET /api/api-tokens— 列出 Token(不返回 hash)DELETE /api/api-tokens/[id]— 删除 Token/admin/api-tokens/page.tsx— Token 管理页面(创建弹窗含权限选择,到期日)middleware.ts— Bearer Token 认证优先于 Session(x-admin-auth-type: tokenheader)- RBAC: Token 管理页面需要 session(不允许 token 访问自己)
[x] 平台级审计日志 ✅
现状: 已实现
GET /api/platform/audit-logs— 查询user_activity_log+project_audit_log,按时间合并排序- 支持
source筛选(all/user/project)和action搜索(ILIKE) /platform/audit/page.tsx— 平台审计页面(来源标签/操作类型/用户UID/IP)
[x] Admin OIDC SSO ✅
现状: 已完成(Admin 前端 Next.js)
src/lib/auth.ts— 完整 OIDC/OAuth2 流程实现jose库 JWT 验证(JWKS 端点动态获取公钥)buildOidcAuthUrl()— 构造授权 URL(openid profile emailscopes)exchangeOidcCode()— Token 交换 + JWT 验证 + 用户自动创建/查找/api/auth/oidc/authorize— OIDC 授权重定向/api/auth/oidc/callback— 授权回调处理- 审计日志记录 OIDC 登录
- 环境变量:
OIDC_ENABLED/OIDC_ISSUER/OIDC_CLIENT_ID/OIDC_CLIENT_SECRET/OIDC_REDIRECT_URI
[ ] 平台用户 SSO / SAML(Rust 后端)
现状: 平台用户(Rust 主应用)尚未支持 SSO
- 需要在 Rust Actix-web 中实现 OIDC/SAML 中间件
- 需要用户自动注册/登录流程
- 企业级需求(LDAP / SAML 2.0)
Phase 4: 平台洞察与自动化(长期)
[x] 平台使用分析仪表盘 ✅
现状: 已实现
/dashboard— 新增聊天室总数统计/dashboard— Workspace 计划分布(饼图替代文字,数量+百分比)/dashboard— 近期项目列表GET /api/platform/stats— 新增 roomCount, planDistribution, recentProjects/dashboard— DAU 趋势图(近30天 SVG 折线图,MAU/总登录/近24h 统计)GET /api/platform/activity-stats— DAU/MAU 统计 API
[x] 告警与自动化规则 ✅
现状: 已完成
workspace_alert_config模型(libs/models/workspaces/workspace_alert_config.rs)libs/service/workspace/alert.rs::check_billing_alerts()— 核心检查逻辑- 后台任务
start_billing_alert_task()— 每 30 分钟自动检查所有 Workspace POST /api/admin/alerts/check— Admin API 手动触发检查src/app/api/platform/alerts/check/route.ts— Admin 前端 API 路由- Workspace 详情页「告警配置」Tab — "立即检查告警"按钮 + 结果反馈
- 支持三种告警类型:
low_balance(余额不足)/monthly_quota(配额超标)/usage_surge(用量激增) - 邮件发送给 Workspace owner/admin,检测用户通知偏好设置
apps/app/src/main.rs— 后台任务随应用启动
[ ] 多租户隔离架构
现状: 长期目标
- 支持独立部署的 Admin(当前是单实例)
- Admin 配置同步(多集群场景)
3. 依赖 Rust 主应用的功能
以下功能需要 Rust 后端支持或新增接口:
| 功能 | Rust 依赖 | 优先级 |
|---|---|---|
| Workspace 充值 | libs/api/admin/billing.rs::admin_workspace_add_credit ✅ 已完成 |
P0 ✅ |
| AI 模型同步触发 | libs/api/admin/sync.rs::admin_sync_models ✅ 已完成 |
P0 ✅ |
| 告警触发逻辑 | libs/service/workspace/alert.rs + 后台任务 ✅ 已完成 |
P0 ✅ |
| AI 模型 CRUD | libs/api/admin/ai_models.rs ✅ Admin CRUD 新建/编辑/删除(Provider/Model/版本/定价) |
P1 ✅ |
| 项目级账单管理 | POST /api/admin/projects/[id]/billing (Next.js 直连 DB,事务保护) ✅ |
P1 ✅ |
| 平台用户会话管理 | /platform/sessions/page.tsx + session:user_uid:* Redis 扫描 ✅ |
P2 ✅ |
| 审计日志增强 | user_activity_log + project_audit_log 直接查询 ✅ |
P2 ✅ |
| 平台用户 SSO/SAML | Rust OIDC/SAML 中间件(企业场景) | P2 |
| Admin API Token | 已实现(Next.js 直连 DB) | P3 ✅ |
4. 技术债务与改进
4.1 Admin ↔ 主应用集成模式
当前问题:Admin 直接查询 DB,绕过 Rust 业务逻辑层。
两种集成方案:
方案 A: Admin 直接写 DB(现状)
- 优点:简单,无跨服务依赖
- 缺点:无法复用 service 层逻辑(计费原子性、事务)
- 适用:只读操作、非关键数据
方案 B: Admin 调用 Rust API(推荐)
- 优点:复用业务逻辑,数据一致性有保障
- 缺点:需处理跨应用认证
- 适用:计费操作、AI 模型管理等
建议:核心写操作(计费)通过 Rust API,查询类操作可直连 DB。
4.2 跨应用认证问题
Rust 主应用 API 需要 session:user_uid cookie,Admin 无法直接调用。
解决方案:
- 共享 Session 存储:Admin 验证后注入 fake session 到 Redis,主应用可读取
- Admin 专用 API:Rust 新增
/api/admin/*路由,验证admin_sessioncookie - API Token:Rust API 支持 Bearer Token,Admin 用服务账号 token 调用
4.3 数据库 Schema 演进
Admin 表(admin_*)与平台表(workspace、user 等)共存于同一 DB。
建议:
- Admin 表命名统一加前缀
adm_*(当前admin_*,兼容) - 避免跨表事务(admin 写操作不影响平台数据,除非明确)
4.4 Redis 命名空间
| Key Pattern | 用途 |
|---|---|
session:user_uid:{uuid} |
平台用户 Session |
admin:session:{uuid} |
Admin Session |
user:session:{uuid} |
(别名,同上) |
注意:平台 session key 实际前缀为 session:user_uid:,不是 user:session:。
5. 版本计划
| 版本 | 目标 | 主要交付 |
|---|---|---|
| v0.1 | MVP(已完成) | 登录/RBAC/审计/在线用户/平台用户/Workspace/AI 模型 |
| v0.2 | 补全(已完成) | 用户详情页 / Workspace 计费操作 / AI 同步触发 |
| v0.3 | 平台级管控(已完成) | 项目管理视图 / 批量操作 / 日志导出 |
| v0.4 | 安全合规(已完成) | API Token ✅ / 平台审计日志 ✅ / SSO/SAML 待完成 |
| v0.5 | 管控增强(已完成) | 房间管理 ✅ / 仓库管理 ✅ / 告警配置 ✅ (UI + Rust 触发) / 多租户待完成 |
| v1.0 | 完整版 ✅ Next.js + Rust Admin API 完成 | Playwright 集成测试 ✅ (41 tests) / AI 同步触发器 ✅ / Workspace 充值 ✅ / 告警触发 ✅ / Admin OIDC SSO ✅ / Admin AI Model CRUD ✅ / 项目充值 ✅ / 平台会话管理 ✅ / 审计增强 ✅ / 平台用户SSO/SAML待完成 / 多租户待完成 |
6. 附录:libs/ 关键文件索引
C:\工作\code\libs\
├── api/
│ ├── lib.rs # 路由注册入口
│ ├── route.rs # web::ServiceConfig 初始化
│ ├── auth/ # 认证(登录/注册/OIDC)
│ ├── workspace/ # Workspace API
│ │ ├── billing.rs # 余额/充值/账单历史
│ │ ├── members.rs # 成员管理
│ │ ├── info.rs # Workspace 信息
│ │ └── stats.rs # 统计
│ ├── project/ # Project API
│ │ └── billing.rs # 项目级计费
│ ├── agent/ # AI 模型/Provider/定价 CRUD
│ │ ├── model.rs # 模型 CRUD
│ │ ├── provider.rs # Provider CRUD
│ │ ├── model_pricing.rs # 定价管理
│ │ ├── code_review.rs # Code Review 触发
│ │ └── pr_summary.rs # PR Summary 触发
│ ├── room/ # 聊天室 WebSocket API
│ ├── git/ # Git 操作 API
│ ├── issue/ # Issue API
│ ├── pull_request/ # PR API
│ ├── user/ # 用户设置 API
│ └── search/ # 搜索 API
├── service/
│ ├── lib.rs # AppService 聚合所有 service
│ ├── workspace/
│ │ ├── billing.rs # workspace_billing_add_credit()
│ │ └── mod.rs
│ ├── project/
│ │ └── billing.rs # 项目级计费
│ ├── agent/
│ │ ├── billing.rs # record_ai_usage()
│ │ ├── sync.rs # sync_upstream_models()
│ │ ├── client.rs # AI 客户端(重试/熔断)
│ │ ├── tokent.rs # Token 估算
│ │ └── react/ # ReAct 模式
│ ├── auth/ # 登录/注册/OIDC 逻辑
│ ├── user/ # 用户服务
│ └── room/ # 聊天室服务
├── models/
│ ├── users/ # platform user 实体
│ ├── workspaces/ # workspace/workspace_membership/workspace_billing
│ ├── projects/ # project/project_members/project_billing
│ ├── agents/ # ai_model_provider/model/version/pricing
│ └── rooms/ # room/room_message/room_member
├── session/
│ ├── lib.rs # SessionMiddleware
│ ├── storage/ # Redis 存储实现
│ └── session.rs # Session 结构
├── db/
│ ├── database.rs # AppDatabase (sqlx pool)
│ └── cache.rs # AppCache (Redis cache)
└── queue/
├── lib.rs # Redis PubSub 队列
└── email.rs # Email worker