From 92c0c09df740da53fcc9fd02546152a4832533af Mon Sep 17 00:00:00 2001 From: zhi Date: Tue, 17 Mar 2026 12:04:59 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20dev=20status=20round=2014=20=E2=80=94?= =?UTF-8?q?=20P5.7=20task=20edit=20restrictions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/milestone-propose-requirements.md | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/docs/milestone-propose-requirements.md b/docs/milestone-propose-requirements.md index 8ca8b81..666c3ab 100644 --- a/docs/milestone-propose-requirements.md +++ b/docs/milestone-propose-requirements.md @@ -454,6 +454,42 @@ - 或 P9.3 前端 task 编辑权限守卫(按 assignee/status 显示/隐藏编辑入口) - 或 P5.7 后端 task PATCH 接口编辑权限服务端防守 +### 2026-03-17 12:00 UTC(第 14 轮:P5.7 Task 编辑权限服务端防守 + P9.3 前端守卫) + +本轮做了什么: +- 实现 P5.7 后端 task PATCH 接口的 status+assignee 编辑限制 +- 实现 P9.3 前端 task 编辑按钮的 status+assignee 可见性守卫 +- **后端 PATCH 接口**(tasks.py): + - `undergoing` / `completed` / `closed`:禁止修改 body 字段(status 字段仍可通过 PATCH 传递以走状态机) + - `open` + `assignee_id` 非空:仅 assignee 本人或 admin 可编辑 body 字段,否则返回 403 + - `open` + `assignee_id` 为空 / `pending`:沿用原有 `ensure_can_edit_task` 通用权限 +- **前端 TaskDetailPage**(P9.3): + - `canEditTask` 重构为考虑 status + assignee 的完整守卫 + - `undergoing/completed/closed`:Edit Task 按钮不显示 + - `open + assigned`:仅 assignee 和 admin 看到编辑按钮 + - `open + unassigned` / `pending`:项目成员均可编辑 + - 移除冗余的 `!isTerminal && task.status !== 'undergoing'` 外层条件(已内化到 canEditTask) + +改了哪些关键文件: +- `HarborForge.Backend/app/api/routers/tasks.py` — PATCH 接口新增 P5.7 守卫(+31 行) +- `HarborForge.Frontend/src/pages/TaskDetailPage.tsx` — canEditTask 重构 + +验证结果: +- Python AST 语法检查通过 +- `npx tsc --noEmit` 零错误通过 +- 已 commit:backend `7542f2d`,frontend `638427d` + +当前阻塞/风险: +- P2 权限骨架仍未落地(close/reopen 权限未注册) +- feature story task 在 freeze 后的编辑限制(P3.6 补充)尚未加入 task PATCH 接口 +- batch transition 接口尚未同步 P5.3/P5.4 校验 +- 无本地 MySQL/运行环境做集成验证 + +下一轮最建议继续做什么: +- P10.7 前端 propose 编辑限制(open 时允许编辑 title/description,其他状态禁止) +- 或 P9.6 前端创建 task 限制(禁止通用 create 创建 feature story / release maintenance task) +- 或 P5.2 补全 pending→open 依赖检查(通用依赖检查 helper) + --- ## 1. 背景