再次提交一下代码
This commit is contained in:
@@ -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`。
|
||||
- Risk:HTML 原文直接渲染带来安全问题。
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user