feat: 实现管理后台端管理接口(A2)

This commit is contained in:
Nixevol
2026-09-30 07:46:03 +08:00
parent 653b0d1866
commit 63b09beead
6 changed files with 1705 additions and 16 deletions
+31 -4
View File
@@ -524,13 +524,13 @@
- 备选方案:另加 INTEGER 列或把数字存成文本并在 JSON 里发数字。
- 影响:W 线类型应按 `string` 解析令牌 id。
4. **尚未实现的管理路由(鉴权中间件已生效,业务返回 501)**
4. **A1 范围外路由当时返回 501(A2 已实现端管理)**
- 原条款:DEVELOPMENT 第 8 节完整路由表。
- 实际做法:已实现 `login`/`logout`/`me`/`password` 与 `/api/admin/tokens` 全套。以下路由经鉴权后返回 `501 not_implemented`(属 A2/A3):
`GET /overview`;`endpoints` 列表/开通/import/batch/详情/改/删/kick/reset-login-password/talk-password/unlock;`registration` GET/PUT;`groups` 全部(含 `GET /groups/{id}`);`messages` 列表与详情;`GET /settings`。
- 实际做法(A1 当时):已实现 `login`/`logout`/`me`/`password` 与 `/api/admin/tokens` 全套;其余经鉴权后 `501`。
- A2 起:端相关路由已改为真实现,见下节;仍为 501 的有 `overview`、`registration`、`groups`、`messages`、`settings`(属 A3)。
- 原因:A1 范围仅鉴权、令牌、操作日志。
- 备选方案:无。
- 影响:W/集成测试在 A2/A3 前勿依赖这些业务响应。
- 影响:W/集成测试在 A3 前勿依赖尚未实现的业务响应。
5. **操作日志用 `slog` 结构化字段**
- 原条款:写结构化日志(操作者、动作、对象、结果、来源 IP)。
@@ -539,6 +539,33 @@
- 备选方案:独立 audit 表。
- 影响:日志采集需按 msg=`admin_audit` 过滤。
### A2 2026-09-30
1. **停用/删除完整级联留给 I5**
- 原条款:PRD F01 / DEVELOPMENT 7.6:停用作废未送达消息与发送中消息;删除另含退群、群主转让/解散、清授权与回执/发出记录等。
- 实际做法:A2 直接写库:停用立刻 `enabled=0` 并清空 `session_hash`;删除删 `endpoints` 行并清相关 `talk_grants`;二者均调用可注入的 `Deps.KickEndpoint` 踢连接。不作废投递/消息、不转让群主、不清理群成员与回执。
- 原因:本分支尚无 I5;TASKS 允许先接现有存储并在偏差中写明。
- 备选方案:阻塞等待 I5;或在 A 线内复制级联 SQL(易与 I5 重复冲突)。
- 影响:合入 I5 后应由身份服务 `Disable`/`Delete` 接管级联;总控接线把 kick 钩子接到 broker。`KickEndpoint` 为 nil 时踢线为 no-op(单元测试可注入)。
2. **在线状态读库字段,不依赖 presence 服务**
- 原条款:列表含是否在线、最近上下线;可按在线筛选。
- 实际做法:用 `endpoints.online_since` / `offline_since` 判定在线(`online_since` 非空且大于 `offline_since` 或后者为空);列表项带 `online` / `online_since_ms` / `offline_since_ms`。
- 原因:presence/N3 未在本 Handler 注入;库字段是契约字段。
- 备选方案:注入 `presence.Service.IsOnline`。
- 影响:上下线列未由 N/I 写入前,列表会显示离线。
3. **`login_locked` 仅反映按编号的登录锁定**
- 原条款:列表含 `login_locked`。
- 实际做法:查 `LockLoginEndpoint`;不枚举「编号+IP」锁定。`unlock` 仍调用 `ClearEndpoint` 清两种。
- 原因:`LoginLocks` 接口无「是否任一 IP 锁定」查询。
- 备选方案:扩展 locks 接口。
- 影响:仅 IP 档锁定时列表可能仍显示未锁定,但 unlock 可解除。
4. **仍未挂载到 `cmd/nixmsg`**
- 同 A1:可挂载 Handler;接线与 `KickEndpoint` 注入留给总控/后续。
- 影响:集成测试需自行挂载 Handler。
## 后台网页 W
1. **W1–W3 阶段使用内存假数据,不请求真实 `/api/admin`**