Files
luo 9f7f619083
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Failing after 18s
feat: 审计链路
2026-08-07 18:38:28 +08:00

53 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Context
审计调查横跨平台、代理和企业三种身份,以及事件、资源、请求、业务链路、资金和外部交互等多种事实视角。后端通过内部资源 ID、主体安全 identifier、`investigation_refs`、Integration `linkage``fidelity` 明确表达可导航关系;前端的职责是原样传递这些稳定引用,而不是补全关系。
现有实现已经形成 `AuditInvestigationDrawer``AuditResourceSearchDialog` 和全局控制器,但业务页面仍需逐一核对入口覆盖、角色映射和降级规则。本设计将导航判断集中到共享目标解析层,展示仍由只读组件负责。
## Goals / Non-Goals
- Goals: 用一个类型安全的目标模型表达所有允许的审计调查入口。
- Goals: 完成文档中资产、组织、账号、交易、资金和调查节点的导航矩阵。
- Goals: 保证平台、代理和企业仅调用各自允许的接口,并隐藏缺少稳定参数的入口。
- Goals: 使用弹窗/右侧抽屉承载续查,锁定底层滚动并支持分页与空状态。
- Non-Goals: 不修改后端链路生成、数据库、留存或授权规则。
- Non-Goals: 不提供恢复、重试、处置、封禁、修改、删除或导出。
- Non-Goals: 不把旧 operation log 合并进新审计链路。
- Non-Goals: 不从 Access Log、历史队列、自由文本或时间邻近关系自动发现链路。
## Decisions
- Decision: 使用判别联合类型描述 `event/actor/resource/request/correlation/finance/integration/agent/enterprise` 调查目标;调用方只能提交该目标模型,不能提交任意 URL。
- Decision: 使用全局调查宿主承载共享抽屉和精确资源弹窗。业务页面操作只负责构造目标,不各自维护弹窗、加载和滚动状态。
- Decision: 独立的审计中心列表与详情可以保留路由;跨视角时间线和关联详情使用抽屉。移除旧时间线路由、别名和所有指向它的跳转。
- Decision: 平台资源入口优先使用业务响应中的内部稳定 ID。只有调用上下文没有资源 ID、但明确持有 `iot_card/device/shop/order/refund` 的业务 Key 时,才进入精确资源搜索。
- Decision: 精确资源搜索不展示 `resource_id` 或身份快照中的内部关联 ID。候选项只展示按资源类型白名单选择的业务字段选中后在内部原样使用返回的 `resource_type/resource_id`
- Decision: 代理使用 ICCID、VirtualNo、分配单号、换货单号、店铺编号或企业编号企业只使用当前授权卡的 ICCID 或设备 VirtualNo。主体身份和范围不作为前端参数。
- Decision: `investigation_refs` 是来源详情续查的权威来源。字段缺失、目标与当前详情相同或 `fidelity=false` 时隐藏对应操作;共享调查抽屉内部保持只读,不重复嵌套一组调查按钮。
- Decision: 请求和业务链路 ID 默认不展示原值;仅在明确的超级管理员开发调查上下文中允许复制真实 request ID且不得由前端生成。
- Decision: 资金目标只提交一个已知稳定条件,其他订单、支付、退款、充值和钱包关联由服务端解析;金额始终按分保存在应用数据中。
- Decision: `401/403`、授权撤销或主体资源不存在时显示中性“活动不可用”,不回退平台接口、精确资源搜索或旧 operation log。
- Decision: 所有抽屉使用 `append-to-body`、modal 和 scroll lock关闭后销毁内容分页切换保留目标和筛选切换目标时清空旧数据。
## Risks / Trade-offs
- 业务页面数量多,容易出现入口漏接或使用错误字段。通过集中目标解析函数和表驱动测试覆盖文档矩阵。
- 全局抽屉减少重复代码,但必须防止上一目标的数据闪现。打开新目标前先清空状态,并以当前请求标识忽略过期响应。
- 精确资源搜索结果来自当前表或历史快照;仅展示白名单字段会减少调试信息,但可以避免泄露内部 ID 和不稳定结构。
- 本变更与 `add-audit-chain-frontend-integration` 修改同一组件目录。实施前必须以其最新状态为基线,避免覆盖已完成的 UI 调整。
## Migration Plan
1. 固化共享调查目标类型、控制器和角色解析函数,并为现有入口提供兼容适配。
2. 将仍指向旧时间线路由的入口切换为全局调查宿主,确认无引用后删除旧页面、路由和别名。
3. 按文档矩阵依次接入资产组织页、账号交易页、资金页和调查节点续查。
4. 收紧精确搜索触发条件、主体视角和空标识降级规则。
5. 完成角色矩阵、参数原样传递、禁止推断、弹窗滚动和过期请求测试。
6. 若出现回归,可按业务模块隐藏新入口;不恢复任意 URL 跳转或 ID 推断逻辑。
## Open Questions
- 账号、代理充值、资产分配、换货、店铺资金概况等尚未接入页面的最终按钮权限是否沿用资源时间线/资金时间线权限,还是增加业务入口专用权限?
- 超级管理员是否需要一个显式的 Access Log request ID 粘贴入口;若不需要,前端应完全移除手工 request 查询。
- `historical=true` 在产品要求隐藏“匹配来源”后,是否仍需用非字段式的警告图标提示资源可能已删除?