gitdataai/admin/ROADMAP.md
ZhenYi fb91f5a6c5 feat(admin): add admin panel with billing alerts and model sync
- 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
2026-04-19 20:48:59 +08:00

16 KiB
Raw Blame History

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 CRUD
  • GET/POST /api/agents/models — Model CRUD
  • GET/POST /api/agents/versions — 版本管理
  • POST /api/agents/versions/{id}/pricing — 定价设置
  • POST /api/agents/models/{id}/sync — 同步上游模型
  • POST /api/agents/code-review/{ns}/{repo} — 触发 Code Review
  • POST /api/agents/pr-description/{ns}/{repo} — 触发 PR Summary

Projectlibs/api/project/:

  • GET/POST /api/projects/{namespace}/{name} — Project CRUD
  • GET /api/projects/{namespace}/{name}/billing — 项目级计费

其他:

  • libs/service/agent/sync.rssync_upstream_models() 从 OpenRouter 同步模型
  • libs/service/agent/billing.rsrecord_ai_usage() 记录 token 消耗并扣费

2. 功能路线图

Phase 1: 补全当前功能(短期)

基于现有 libs/api 直接可调用接口,快速实现。

[x] Workspace 计费操作(充值/调整配额)

现状: 已实现(直接写 DB

  • POST /api/platform/workspaces/{id}/add-credit — 充值 APIINSERT billing_history + UPDATE billing.balance事务保护
  • /admin/workspaces/[id]/page.tsx — 充值弹窗(输入金额+备注,充值后自动刷新)
  • 说明: 直接写 DB绕过 Rust service 层(事务内保证原子性)

[x] AI 模型同步触发器

现状: 已完成

  • libs/api/admin/sync.rsPOST /api/admin/ai/syncx-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 — 房间列表 API
  • GET /api/platform/rooms/[id]/messages — 房间消息 API
  • DELETE /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/workspacesUPDATE workspace.plan
  • 全选/反选/已选计数 UI

Phase 3: 安全与合规(中期)

[x] Admin API 令牌

现状: 已实现

  • src/lib/api-token.ts — Token 生成SHA-256 哈希)、验证、创建、删除
  • admin_api_tokenid, 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 认证优先于 Sessionx-admin-auth-type: token header
  • RBAC: Token 管理页面需要 session不允许 token 访问自己)

[x] 平台级审计日志

现状: 已实现

  • GET /api/platform/audit-logs — 查询 user_activity_log + project_audit_log,按时间合并排序
  • 支持 source 筛选all/user/projectaction 搜索ILIKE
  • /platform/audit/page.tsx — 平台审计页面(来源标签/操作类型/用户UID/IP

[x] Admin OIDC SSO

现状: 已完成Admin 前端 Next.js

  • src/lib/auth.ts — 完整 OIDC/OAuth2 流程实现
  • jose 库 JWT 验证JWKS 端点动态获取公钥)
  • buildOidcAuthUrl() — 构造授权 URLopenid profile email scopes
  • 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 / SAMLRust 后端)

现状: 平台用户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 cookieAdmin 无法直接调用。

解决方案:

  1. 共享 Session 存储Admin 验证后注入 fake session 到 Redis主应用可读取
  2. Admin 专用 APIRust 新增 /api/admin/* 路由,验证 admin_session cookie
  3. API TokenRust API 支持 Bearer TokenAdmin 用服务账号 token 调用

4.3 数据库 Schema 演进

Admin 表(admin_*)与平台表(workspaceuser 等)共存于同一 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