feat(admin): 审计 & 安全事件页(T4.B 收尾)
- 新增「审计 & 安全」页(/audit,运维组):接 /admin/audit + /admin/guardrail-events - 安全事件:护栏拦截/灰区放行(kind 徽标 + 原因 + method/path + actor/ip/时间) - 操作审计:变更操作(方法配色徽标 + 路径 + 状态码着色 + actor/ip/时间) - 顶栏统计(操作留痕/护栏拦截/灰区) + 30s 自刷 + 手动刷新 - api.ts 增 listAudit / listGuardrailEvents + 类型 - 风格对齐重做后的服务状态页(中性克制) - T4.B 整组完成(剩 HITL 审批明细可选小项) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+3
-3
@@ -165,12 +165,12 @@ RBAC 未做,暂以单管理员账号代理;概览口径必须是**系统级*
|
||||
- [ ] 用户管理接口:列举 / 禁用 / 改角色(现仅注册/登录/查我,handler/auth.go)| M
|
||||
- [ ] 多租户:Task/Eval/KB/Agent 加 tenant_id,owner_id 之上补租户隔离边界 + 租户表/关联表(store 全表,单租户假设)| L
|
||||
|
||||
### [~] 🔴 T4.B 审计 / 可溯源 + 管理端聚合(推荐先做,内聚且喂管理端)
|
||||
### [x] 🔴 T4.B 审计 / 可溯源 + 管理端聚合 ✅(大头全 live;剩 HITL 明细可选)
|
||||
- [x] `GET /api/v1/admin/overview`(RequireAdmin) 系统级聚合 ✅ —— 全平台用户/KB/任务/评测/模型态/prompt 覆盖/健康;概览页已切过去(5调用→2),live 验证 users=7/kb 22/50 全平台口径。
|
||||
- [x] `audit_log` 表 + 中间件 ✅ —— `store.AuditLog` + `middleware.Audit(db)` 挂管理组 + prompt 激活/撤销 + HITL 审批;只审计变更类(POST/PUT/DELETE/PATCH),best-effort 落库不拖垮主流程;`GET /admin/audit` 列表(倒序翻页)。live:PUT pricing / POST deactivate 留痕,GET 不记。
|
||||
- [x] 护栏拦截事件落库 `guardrail_event` ✅ —— Guardrail 中间件命中(blocked/suspect)best-effort 落库(actor/kind/reason/signals/path/ip) + `GET /admin/guardrail-events`;live:注入 payload→422 硬拦+事件留痕。
|
||||
- [ ] HITL 审批决定明细落库(现审批已进 audit_log 但只有 who/when/status,无 approve/reject 决定与理由;可 enrich audit Detail 或单独表)| S
|
||||
- [ ] 前端:管理端加「审计流 / 安全事件」页或概览接 /admin/audit(把留痕可视化)| S
|
||||
- [x] 前端「审计 & 安全」页 ✅ —— `/audit`(运维组)接 /admin/audit + /admin/guardrail-events:安全事件(护栏拦截/灰区)+ 操作审计(方法配色/状态码/actor/ip/时间)+ 顶栏统计 + 30s 自刷;live 验证。
|
||||
- [ ] HITL 审批决定明细落库(现审批已进 audit_log 但只有 who/when/status,无 approve/reject 决定与理由;可 enrich audit Detail 或单独表)| S ← T4.B 唯一剩项(可选小项)
|
||||
|
||||
### [ ] T4.C 真实成本计费
|
||||
- [ ] token×单价 落库 `token_usage`(现仅 Redis 按天计数 TTL48h,task_handler.go:532)| L
|
||||
|
||||
Reference in New Issue
Block a user