# 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

**Project**（`libs/api/project/`）:
- `GET/POST /api/projects/{namespace}/{name}` — Project CRUD
- `GET /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` — 房间列表 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/workspaces`，UPDATE `workspace.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: token` header）
- 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 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 / 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 无法直接调用。

解决方案：
1. **共享 Session 存储**：Admin 验证后注入 fake session 到 Redis，主应用可读取
2. **Admin 专用 API**：Rust 新增 `/api/admin/*` 路由，验证 `admin_session` cookie
3. **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
```
