# T6 任务简报:权限、错误码、并发与幂等集成 ## Where This Fits - Wave: W3 - Depends on: T5 - Contract: `changes/n04-onboard/execution-contract.md` - Design: `changes/n04-onboard/design.md` 的 API、Error Codes、Risks ## Objective 把 W2 已完成的清单与知识服务接入统一安全、错误码和并发语义,先用集成测试锁定权限矩阵、所有权隔离、版本冲突和响应最小化。 ## Files In Scope - `mydreamjob-server/src/main/java/com/mydreamjob/config/SecurityConfig.java` - `mydreamjob-server/src/main/java/com/mydreamjob/common/exception/ErrorCode.java` - `mydreamjob-server/src/main/java/com/mydreamjob/onboarding/OnboardingChecklistService.java` - `mydreamjob-server/src/main/java/com/mydreamjob/onboarding/CompanyKnowledgeService.java` - `mydreamjob-server/src/test/java/com/mydreamjob/onboarding/OnboardingAuthorizationIntegrationTest.java` - `mydreamjob-server/src/test/java/com/mydreamjob/onboarding/OnboardingConcurrencyIntegrationTest.java` - `mydreamjob-server/src/test/java/com/mydreamjob/onboarding/OnboardingPrivacyTest.java` ## Required Behavior - `/onboarding/**` 必须认证;未登录 401。 - 学生接口仅 STUDENT;企业接口仅 COMPANY;角色不符 403。 - 企业接口只能操作当前用户绑定的企业;跨企业 itemId 返回 9701,不能泄露其他企业数据。 - 新增 9701-9706:item not found、item concurrent update、item limit exceeded、idempotency conflict、progress concurrent update、knowledge concurrent update。 - 创建幂等冲突返回 9704;活动项上限返回 9703。 - 更新/删除清单项乐观锁冲突映射 9702;进度冲突映射 9705;知识冲突映射 9706。 - 所有响应使用白名单 DTO,不包含 ownerUserId、studentUserId、审核原因、哈希、IP、User-Agent、Token。 - 失败请求不得产生部分写入或修改其他企业数据。 ## TDD Requirement 1. 先写三个集成测试并确认 RED。 2. 再修改安全配置、错误码和 Service 异常映射使测试 GREEN。 3. 不改变既有非 onboarding 路径的安全语义。 ## Evidence Commands ```powershell cd D:\1\zhi\zhilai\mydreamjob-server mvn -Dtest=OnboardingAuthorizationIntegrationTest,OnboardingConcurrencyIntegrationTest,OnboardingPrivacyTest test ``` ## Done Definition - 权限矩阵覆盖匿名、STUDENT、COMPANY、ADMIN、错误企业。 - 并发与幂等冲突均返回契约规定的 HTTP 状态和错误码。 - 隐私测试检查 JSON 响应不含内部字段。 - onboarding 专项测试全部通过。 - 并发创建:相同 idempotencyKey 并发请求只能产生一条记录并返回成功或 9704;并发达到 50 条边界不得写入第 51 条活动项。 - 首次进度记录若携带非 0 version,必须返回 9705。