Fix admin SQL count parsing for local SpacetimeDB
This commit is contained in:
@@ -2,6 +2,10 @@
|
||||
|
||||
日期:`2026-04-23`
|
||||
|
||||
更新:`2026-04-30`
|
||||
|
||||
> 状态说明:本文件中的管理员鉴权、`/admin/api/*` 管理接口、数据库概览与受控 API 调试设计继续有效;同源内嵌 HTML/CSS/JS 后台页面已废弃。后续后台 UI 迁移到独立前端工程,当前 `api-server` 不再挂载 `GET /admin` 页面入口。独立后台前端的产品边界见 [`../prd/ADMIN_WEB_CONSOLE_PRD_2026-04-30.md`](../prd/ADMIN_WEB_CONSOLE_PRD_2026-04-30.md),技术方案见 [`ADMIN_WEB_CONSOLE_TECHNICAL_SOLUTION_2026-04-30.md`](./ADMIN_WEB_CONSOLE_TECHNICAL_SOLUTION_2026-04-30.md)。
|
||||
|
||||
## 1. 目标
|
||||
|
||||
为当前 Rust `api-server` 增加一套同源后台管理服务,满足以下首版目标:
|
||||
@@ -10,7 +14,7 @@
|
||||
2. 支持独立的管理员鉴权,不允许普通玩家 JWT 越权访问。
|
||||
3. 支持在后台查看当前服务与数据库概览信息。
|
||||
4. 支持在后台测试当前 `api-server` 已挂载接口。
|
||||
5. 保持首版工程足够轻量,不新建额外独立服务进程,不引入第二套前端工程。
|
||||
5. 保持管理能力继续收口在 `server-rs`,管理 UI 由独立后台前端工程承接。
|
||||
|
||||
## 2. 背景与约束
|
||||
|
||||
@@ -24,19 +28,20 @@
|
||||
|
||||
1. 后端统一落在 `server-rs`,不回退到 `server-node`。
|
||||
2. 不额外新起独立管理服务进程。
|
||||
3. 首版以“一个受保护管理域 + 一个同源后台页面”为落地形态。
|
||||
3. 管理 API 继续作为受保护管理域挂载在 `api-server`。
|
||||
4. 数据库信息必须尽量读取真实数据库侧信息,不能只展示硬编码假数据。
|
||||
|
||||
## 3. 首版范围
|
||||
|
||||
### 3.1 包含
|
||||
|
||||
1. `GET /admin`:后台管理页面入口。
|
||||
2. `POST /admin/api/login`:管理员用户名密码登录。
|
||||
3. `GET /admin/api/me`:当前管理员会话信息。
|
||||
4. `GET /admin/api/overview`:服务与数据库概览。
|
||||
5. `POST /admin/api/debug/http`:受控 HTTP 接口调试。
|
||||
6. 基于 Bearer JWT 的管理员鉴权中间件。
|
||||
1. `POST /admin/api/login`:管理员用户名密码登录。
|
||||
2. `GET /admin/api/me`:当前管理员会话信息。
|
||||
3. `GET /admin/api/overview`:服务与数据库概览。
|
||||
4. `POST /admin/api/debug/http`:受控 HTTP 接口调试。
|
||||
5. `POST /admin/api/profile/redeem-codes`:兑换码创建/更新。
|
||||
6. `POST /admin/api/profile/redeem-codes/disable`:兑换码停用。
|
||||
7. 基于 Bearer JWT 的管理员鉴权中间件。
|
||||
|
||||
### 3.2 不包含
|
||||
|
||||
@@ -44,7 +49,7 @@
|
||||
2. 管理员 refresh cookie / 多端会话管理。
|
||||
3. 后台直接写库、删库、执行 reducer。
|
||||
4. 任意 SQL 执行器。
|
||||
5. 新建独立 React/Vite 管理端工程。
|
||||
5. `api-server` 内嵌 HTML/CSS/JS 后台页面。
|
||||
|
||||
## 4. 总体方案
|
||||
|
||||
@@ -60,13 +65,13 @@
|
||||
|
||||
### 4.2 页面形态
|
||||
|
||||
后台管理页面采用 `api-server` 直接返回一份内嵌 HTML/CSS/JS 的管理页。
|
||||
后台管理页面不再由 `api-server` 直接返回内嵌 HTML/CSS/JS。`api-server` 仅保留管理 API,页面由独立后台前端工程调用这些接口。
|
||||
|
||||
原因:
|
||||
|
||||
1. 首版目标是“可用的后台能力”,不是新建一套复杂前端基建。
|
||||
2. 管理页面交互相对简单,直接内嵌更易随服务端一起部署。
|
||||
3. 可以避免新增构建链和静态资源发布路径。
|
||||
1. 管理 UI 需要独立演进,不应继续堆在 Rust 源码字符串中。
|
||||
2. `server-rs` 继续负责鉴权、聚合和写操作,符合前端只做表现的工程约束。
|
||||
3. 删除 `GET /admin` 后,当前服务访问该路径应返回 `404`。
|
||||
|
||||
### 4.3 数据库信息来源
|
||||
|
||||
@@ -129,7 +134,7 @@ claims 设计:
|
||||
|
||||
## 6. 后台页面设计
|
||||
|
||||
首版页面包含三个主区域:
|
||||
本节已由独立后台前端工程方案接管。历史同源页面曾包含三个主区域:
|
||||
|
||||
1. 登录卡片。
|
||||
2. 数据库概览面板。
|
||||
@@ -223,7 +228,7 @@ claims 设计:
|
||||
|
||||
默认策略:
|
||||
|
||||
1. 若未配置用户名或密码,则后台登录接口返回 `503`,后台页面显示“后台未启用”。
|
||||
1. 若未配置用户名或密码,则后台登录接口返回 `503`,独立后台前端自行展示未启用状态。
|
||||
2. 默认管理员 token TTL 为 `4` 小时。
|
||||
|
||||
## 10. 测试要求
|
||||
@@ -240,21 +245,27 @@ claims 设计:
|
||||
|
||||
## 11. 路由清单
|
||||
|
||||
首版新增路由:
|
||||
当前保留的管理 API 路由:
|
||||
|
||||
1. `GET /admin`
|
||||
2. `POST /admin/api/login`
|
||||
3. `GET /admin/api/me`
|
||||
4. `GET /admin/api/overview`
|
||||
5. `POST /admin/api/debug/http`
|
||||
1. `POST /admin/api/login`
|
||||
2. `GET /admin/api/me`
|
||||
3. `GET /admin/api/overview`
|
||||
4. `POST /admin/api/debug/http`
|
||||
5. `POST /admin/api/profile/redeem-codes`
|
||||
6. `POST /admin/api/profile/redeem-codes/disable`
|
||||
|
||||
`GET /admin` 已取消挂载,后续由独立后台前端工程承接页面入口。
|
||||
|
||||
## 12. 完成定义
|
||||
|
||||
满足以下条件时,本任务视为完成:
|
||||
当前管理 API 保留与内嵌页面移除满足以下条件时,本任务视为完成:
|
||||
|
||||
1. `api-server` 内存在受保护后台管理域。
|
||||
2. 管理员用户名密码可登录。
|
||||
3. 普通用户 token 无法访问后台接口。
|
||||
4. 后台能看到服务和数据库真实概览。
|
||||
5. 后台能调试当前服务 HTTP 接口。
|
||||
6. 路由索引与技术文档已同步更新。
|
||||
6. 兑换码管理 API 可由管理员 token 调用。
|
||||
7. `GET /admin` 不再挂载,访问返回 `404`。
|
||||
8. 独立后台前端 PRD 与技术方案已补齐。
|
||||
9. 路由索引与技术文档已同步更新。
|
||||
|
||||
Reference in New Issue
Block a user