补充安全权限日志与草稿状态约定

This commit is contained in:
talesofzes
2026-06-22 17:30:59 +08:00
parent df0b3fa267
commit a41e2c28d4
19 changed files with 451 additions and 129 deletions
+28 -8
View File
@@ -16,6 +16,8 @@
8. 接收卡片按钮回调。
9. 支持接收人反馈已收到、处理中、已完成、有问题。
10. 记录飞书事件、通知发送结果和回调处理结果。
11. 旧卡片、失效卡片和重复点击必须幂等处理。
12. 平台内“有问题反馈”页需要在飞书手机端最小可用。
## 3. 第一版不做
@@ -59,7 +61,9 @@
-> 验签
-> 记录 feishu_events
-> 查找 notification / draft / task / reminder
-> 校验 event_id 或 idempotency_key
-> 校验操作人权限
-> 校验通知、草稿和卡片仍有效
-> 执行业务动作
-> 写 operation_logs
-> 返回飞书处理结果
@@ -80,7 +84,7 @@
9. `failure_records`
10. `operation_logs`
字段以 `docs/contracts/数据对象约定.md` 为准。
字段以 `docs/contracts/数据对象约定.md` 为准;权限、安全、日志脱敏、验签和幂等以 `docs/contracts/安全权限日志约定.md` 为准。
## 6. 接口需求
@@ -108,11 +112,13 @@
状态以 `docs/contracts/状态流转约定.md` 为准。幂等约束:
1. 同一个飞书 `event_id` 只处理一次。
1. 同一个飞书 `event_id` 只处理一次;没有稳定 `event_id` 时必须使用 `idempotency_key`
2. 同一个通知只允许一个有效发送结果。
3. 同一个卡片按钮重复点击不得重复创建事项、提醒或反馈。
4. 同一个机器人消息还必须按 `source + message_id` 在老板秘书入口二次幂等,不重复追加 `secretary_messages`
5. 回调处理失败必须标记 `feishu_events.process_status = failed` 并写失败记录
4. 草稿确认类卡片必须匹配 `ai_drafts.active_card_notification_id`
5. 旧卡片、失效卡片、已替代草稿和已过期通知的回调只写入 `feishu_events`,标记 `ignored`,不得写业务对象
6. 同一个机器人消息还必须按 `source + message_id` 在老板秘书入口二次幂等,不重复追加 `secretary_messages`
7. 回调处理失败必须标记 `feishu_events.process_status = failed` 并写失败记录。
## 9. 失败和日志
@@ -128,9 +134,19 @@
8. 操作人无权操作。
9. 有问题反馈缺少原因。
普通日志不得打印飞书 token、App Secret、完整手机号或完整邮箱。
普通日志不得打印飞书 token、App Secret、OAuth code/state、一次性操作 token、回调验签密钥、完整手机号或完整邮箱。
## 10. 给 AI 的测试样例
## 10. 平台内反馈页
飞书卡片无法直接完成“有问题”原因填写时,允许跳转平台内反馈页。第一版不做完整手机网页适配,但该页在飞书手机端必须最小可用:
1. 能通过飞书登录态或一次性反馈 token 识别反馈人。
2. 一次性反馈 token 只保存 hash,不保存明文。
3. 只展示事项或提醒摘要、反馈状态选择和问题原因输入。
4. 操作人不是接收人、链接过期、通知失效或卡片失效时,只提示不可反馈并记录事件或失败,不写业务对象。
5. 提交成功后写入 `feedbacks` 并按状态流转更新事项或提醒。
## 11. 给 AI 的测试样例
1. 验签失败的回调应返回拒绝并写失败记录。
2. 同一 `event_id` 重放应幂等,不重复创建反馈。
@@ -138,11 +154,15 @@
4. 老板点击取消草稿后,草稿不能再转换。
5. 非老板私聊机器人不应调用 AI。
6. 飞书通知失败时,应写 `failure_records` 并保留通知失败状态。
7. 没有稳定 `event_id` 的卡片回调应使用 `idempotency_key` 幂等。
8. 旧确认卡片或已失效通知的回调只记录 `feishu_events`,不得创建事项、提醒或反馈。
9. 飞书手机端平台反馈页必须能提交“有问题”原因,并拒绝过期 token。
## 11. Review 重点
## 12. Review 重点
1. 回调是否验签。
2. 回调是否幂等。
2. 回调是否使用 `event_id``idempotency_key` 幂等。
3. 飞书身份是否没有直接绕过平台权限。
4. 通知内容是否只发摘要和链接。
5. 失败是否可复盘。
6. 旧卡片、失效卡片是否不会继续写业务对象。