Files

3.1 KiB

workbuddy 评审反馈 — 2026-06-14 消息相关推送

推送内容: 消息撤回/删除/状态/已读/图片上传/文件上传(版本说明 v1.1.0) 评审日期: 2026-06-14 评审人: Claude 主报告: D:\资料\03-项目开发\wecom_it_smart_desk\docs\评审报告\workbuddy-2026-06-14-消息优化.md


给 workbuddy 的关键反馈

  1. 本次推送 6/13 = 46% 是 P0 鉴权漏洞 —— 必须加 "端点必须 Depends 鉴权" 自检
  2. 版本说明文档有 4 处错误,含 -p root 正是用户生产事故的根因
  3. 5 个端点完全没有鉴权依赖 —— 新增端点请用以下模式之一:
    • 坐席端: agent: Agent = Depends(get_current_agent) (来自 app.api.agents)
    • H5 员工端: employee_id: str = Depends(_get_current_employee) (来自 app.api.h5)
    • 上传通用: 需新建 get_current_user_id 兼容两端

🔴 P0 已修(本地代码,本评审完成)

# 端点 修复要点
P0-1 GET /h5/conversations/{id}/participants is_creator/is_participant 校验
P0-2 POST /messages/{id}/recall agent 鉴权 + sender_id 校验
P0-3 DELETE /messages/{id} 同上
P0-4 POST /conversations/{id}/mark-read agent 鉴权 + assigned/collaborator + SQL is_(False)
P0-5 POST /messages/image agent 鉴权
P0-6 POST /messages/file 同上

🟡 P1 请 workbuddy 跟进

# 行动
P1-1 upload 路径在容器本地 改 volume mount(参考 nginx 静态文件挂载模式)
P1-2 SQL 迁移未走 Alembic 生成对应迁移脚本:alembic revision --autogenerate -m "add message status and recallable_until"
P1-3 docker-compose backend healthcheck 用 curl 改用 Python 一行:python -c "import socket; s=socket.socket(); s.connect(('localhost',8000))"
P1-4 ws_manager 没实现"消息状态广播" 实现方法(如 broadcast_message_status(conv_id, msg_id, status))

🟢 P2 请 workbuddy 跟进

# 行动
P2-2 upload 写文件非原子 先写 *.tmp 再 rename
P2-3 upload 返回原始文件名 URL encode 或 XSS 过滤

📄 文档修订清单(docs/IT智能服务台-版本更新说明-20250614.md)

  1. 部署步骤 5 删除 -p root 标志 —— 这是用户 6-14 生产事故的根因
  2. 部署步骤 6 SQL 引号未转义 —— 改用 Alembic 迁移,不要手动 ALTER
  3. 2.1 ws_manager 文档与代码不符(实际未实现状态广播) → 改 "规划中" 或 "本次未实现"
  4. 2.1 docker-compose "healthcheck 已配置" 不准确 → 加注 backend curl 坑

🔁 流程建议

  • 推送前自检清单:
    • 新增/修改端点是否有 Depends(...) 鉴权?
    • 数据库 schema 变化是否有 Alembic 迁移?
    • Docker 配置变化是否本地起得了容器?
    • 版本说明与代码 diff 是否完全一致?
  • 强烈建议:workbuddy 推送前跑 pre-commit-review.py(可由 Claude 生成),P0 数量超 0 拒绝推送

下次推送窗口: 建议等 P1-1~4 + P2-2/3 全部修完再合入,不要在评审发现的问题未修前再叠加新功能