|
|
@@ -4,6 +4,26 @@
|
|
|
|
|
|
---
|
|
|
|
|
|
+## v1.0.1912 (2026-10-31)
|
|
|
+
|
|
|
+### 测试
|
|
|
+- 接口冒烟闭环 2026-11-01 00:54 — 通过率 45% (fix=0 reg=0); 测试用例 360/387 完成(文档化202)
|
|
|
+
|
|
|
+### Bug 修复
|
|
|
+- SEC-20261031-01 安全契约缺口修复 — switch-role角色白名单 + member/list开放端点 + 上传PDF类型校验 + 鉴权统一
|
|
|
+
|
|
|
+### 其他
|
|
|
+- 防止普通用户越权切到 admin/operator 等后台角色并签发高权限 token(权限提升高危)
|
|
|
+- 2. JwtInterceptor.LOGIN_REQUIRED_PATHS: 新增 /api/auth/switch-role、/api/family/user/switch-role、
|
|
|
+- /api/family/member/list、/api/energy/overview、/api/ai/health-coach/send —— 无 token 直接 HTTP 401,
|
|
|
+- 杜绝匿名(userId=-1)放行到 controller 后走业务 500 的口径漂移(开放端点高危)
|
|
|
+- 3. FamilyMembersController.listMembers: userId<=0(匿名哨兵) 统一拦截为 401, 防止匿名访问家庭私有成员列表
|
|
|
+- 4. AssessmentReportController.uploadReport: 仅接受 PDF(Content-Type或扩展名), 非 PDF 返回 HTTP 415(上传校验高危)
|
|
|
+- 5. 鉴权统一(系统): AuthController.switchRole / FamilyUserController.switchRole 增加 userId<=0 -> 401,
|
|
|
+- 对齐 ssoTicket 既有口径, 使未登录/匿名在拦截器与控制器两层行为一致
|
|
|
+-
|
|
|
+
|
|
|
+
|
|
|
## v1.0.1911 (2026-10-31)
|
|
|
|
|
|
### 其他
|