merge: admin-web H-02 audit

# Conflicts:
#	docs/DEVIATIONS.md
#	internal/admin/endpoints.go
This commit is contained in:
Nixevol
2026-09-30 15:39:20 +08:00
13 changed files with 650 additions and 130 deletions
+10 -1
View File
@@ -739,11 +739,20 @@
- 备选方案:改密失败不返回 401(与契约不符);未采用。W-01 排除改密 401 自动登出。
- 影响:连续 10 次旧密码错误后锁定;过期会话行在下次登录清除。
### 复审修复 H-02
- 日期:2026-09-30
- 原条款:PRD F17 每个改变状态的操作记日志;DEVELOPMENT §8 / admin-api 1.4 结构化操作日志;审查 #45。
- 实际做法:`Deps.AuditLogger` 独立 slog(始终 Info),`serve` 装配,不受 `log.level` 影响。审计增加 `token_id` 与不含秘密的 `detail`(enabled / code_changed / generated / members / failed / new_owner / 导入前 20 个编号加 total)。批量结果为 ok/partial/failed。登录失败、锁定、错误令牌写 `admin_auth_fail`(ip+reason)。令牌名称 1–64 字符。Cookie 未登录不记 `admin_auth_fail`。
- 原因:原先走全局 Info,warn/error 级别会丢全部审计;令牌可重名改名;批量恒 ok;失败登录无记录。
- 备选方案:独立 audit 表;未采用,保持 slog 采集。
- 影响:日志采集仍按 `admin_audit` 过滤,新字段只增不改;另需采集 `admin_auth_fail`。
### 复审修复 H-07
- 日期:2026-09-30
- 原条款:PRD F02 管理员重置登录密码后当前连接被踢下线;审查 #50。
- 实际做法:`PasswordResetKick` 出错时回退 `KickEndpoint`,审计 `result=ok_kick_failed` 并写错误日志;HTTP 仍 200(密码已改)。停用/删除踢线钩子出错只写日志,不改审计结果。未改 H-02 审计框架,仍走现有 `audit()` slog。
- 实际做法:`PasswordResetKick` 出错时回退 `KickEndpoint`,经 H-02 `auditP` 记 `result=ok_kick_failed` 并写错误日志;HTTP 仍 200(密码已改)。停用/删除踢线钩子出错只写日志,不改审计结果。
- 原因:`fatalKick` 清会话失败会直接返回,重置路径原先吞掉错误仍记 ok,设备可能仍在线。
- 备选方案:踢线失败改回 500 并回滚密码;未采用,口令已写入且重试会再重置一次。
- 影响:致命踢线失败时仍会尽力断开连接;审计可区分踢线未完成。