再次提交一下代码

This commit is contained in:
andy
2026-07-17 13:13:47 +07:00
parent f4d86248d4
commit 980a3a2535
41 changed files with 1699 additions and 187 deletions

View File

@@ -219,7 +219,7 @@ SOURCE_MESSAGE_READ
// 邮件来源记录读取权限:允许查看列表和摘要详情
SOURCE_MESSAGE_ORIGINAL_READ
// 邮件原文读取权限允许读取正文、HTML、正文图片 URL 和附件 URL
// 邮件原文读取附加权限:需叠加 SOURCE_MESSAGE_READ允许读取正文、HTML、正文图片 URL 和附件 URL
```
## 6. Success Metrics
@@ -233,7 +233,7 @@ SOURCE_MESSAGE_ORIGINAL_READ
- 重复投递去重成功率:重复外部邮件不会重复创建 SourceMessage。
- 查询可用性:可以按时间、状态、外部邮件 ID、外部邮件链 ID 查询本项目已接收邮件。
- 原文读取可控性:只有具备 `SOURCE_MESSAGE_ORIGINAL_READ` 权限的调用方可以读取原文和媒体 URL。
- 原文读取可控性:只有同时具备 `SOURCE_MESSAGE_READ` `SOURCE_MESSAGE_ORIGINAL_READ` 权限的调用方可以读取原文和媒体 URL。
### Guardrail Metrics
@@ -310,10 +310,10 @@ so that 后续业务功能可以在需要时展示完整邮件上下文
Acceptance Criteria:
- Given 调用方具备 `SOURCE_MESSAGE_ORIGINAL_READ` 权限
- Given 调用方同时具备 `SOURCE_MESSAGE_READ` `SOURCE_MESSAGE_ORIGINAL_READ` 权限
When 调用邮件原文读取接口
Then 返回 `textBody``htmlBody``inlineImages[]``attachments[]`
- Given 调用方不具备 `SOURCE_MESSAGE_ORIGINAL_READ` 权限
- Given 调用方不具备 `SOURCE_MESSAGE_READ``SOURCE_MESSAGE_ORIGINAL_READ` 任一权限
When 调用邮件原文读取接口
Then 系统拒绝访问
- Given 原文接口返回 `htmlBody`
@@ -347,9 +347,9 @@ Acceptance Criteria:
### Dependencies
- AgentBus payload 字段稳定性:依赖 `source.external_message_id``source.external_conversation_id``body.text``body.html``inline_images[]``attachments[]`
- 权限体系:需要后续确认 `SOURCE_MESSAGE_READ``SOURCE_MESSAGE_ORIGINAL_READ` 如何落到角色
- 审计体系:需要记录原文读取行为,具体表结构可与平台审计能力统一设计
- HTML 安全展示:前端展示 HTML 前必须 sanitize后端接口文档也要明确该约束
- 权限体系:已落地 `SOURCE_MESSAGE_READ``SOURCE_MESSAGE_ORIGINAL_READ`,内置角色映射以 M003 和当前代码为准
- 审计体系:原文读取已使用 `platform_source_message_original_access_audit` 独立记录
- HTML 安全展示:后端已返回 `html_body_sanitized` / `html_render_mode`,前端生产展示优先使用清洗字段
### Risks & Mitigations
@@ -358,7 +358,7 @@ Acceptance Criteria:
- Risk重复投递 payload 内容不同,覆盖原始事实会破坏追溯。
Mitigation幂等命中后不覆盖原 payload差异通过安全摘要或后续 attempt 记录表达。
- Risk邮件原文或媒体 URL 在列表、日志、错误响应中过度暴露。
Mitigation列表只返回安全摘要原文接口独立权限;日志和错误响应脱敏。
Mitigation列表只返回安全摘要原文接口必须同时校验摘要读取和原文读取权限;日志和错误响应脱敏。
- Risk业务模块直接依赖 AgentBus DTO。
Mitigation业务模块只依赖 SourceMessage ID 和平台接口AgentBus DTO 只留在 `integrations.messaging.agentbus`
- RiskHTML 原文直接渲染带来安全问题。
@@ -368,10 +368,10 @@ Acceptance Criteria:
| 问题 | 负责人 | 状态 |
| --- | --- | --- |
| 第一个 checkpoint 是否直接实现 `/api/source-messages/{id}/original` 原文读取接口,还是只写接口契约并后置实现? | 产品 / 后端 | Open |
| `SOURCE_MESSAGE_READ``SOURCE_MESSAGE_ORIGINAL_READ` 第一阶段如何映射到角色? | 产品 / 后端 | Open |
| 原文读取审计是否使用独立表,还是复用后续统一审计能力? | 后端 | Open |
| HTML sanitize 主要在前端完成,还是后端也提供清洗后的安全 HTML | 前端 / 后端 | Open |
| 第一个 checkpoint 是否直接实现 `/api/source-messages/{id}/original` 原文读取接口,还是只写接口契约并后置实现? | 产品 / 后端 | Closed已实现单封原文读取并补充会话完整正文接口。 |
| `SOURCE_MESSAGE_READ``SOURCE_MESSAGE_ORIGINAL_READ` 第一阶段如何映射到角色? | 产品 / 后端 | Closed内置 `RESERVATION_OPERATOR` 含原文读取权限,`RESERVATION_VIEWER` 仅含安全摘要读取权限;系统管理员拥有全部权限。 |
| 原文读取审计是否使用独立表,还是复用后续统一审计能力? | 后端 | Closed使用 `platform_source_message_original_access_audit` 独立记录原文读取审计。 |
| HTML sanitize 主要在前端完成,还是后端也提供清洗后的安全 HTML | 前端 / 后端 | Closed后端返回 `html_body_sanitized` / `html_render_mode`,前端生产展示优先使用清洗字段。 |
| 是否需要第一阶段支持按正文摘要关键字搜索,还是只按 ID、时间、状态、邮件链查询 | 产品 | Open |
## PRD Self-Assessment