diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java index 6221a7d1..9fffdc0e 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java @@ -227,9 +227,6 @@ public class AihrMobileController { } private static String scopedAssignmentExtPartyId(String requested) { - if (requested == null || requested.isBlank()) { - return requested; - } return ownMobileExtPartyId(requested); } diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrPracticeSeedServiceTest.java b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrPracticeSeedServiceTest.java index 086b009b..f1174de2 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrPracticeSeedServiceTest.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrPracticeSeedServiceTest.java @@ -475,6 +475,7 @@ public class AihrPracticeSeedServiceTest { assertTrue(controllerSource.contains("无权访问员工个人数据")); assertTrue(controllerSource.contains("UserType.SYS_USER.getUserType().equals(loginUser.getUserType())")); assertTrue(controllerSource.contains("StpUtil.hasRoleOr(TenantConstants.SUPER_ADMIN_ROLE_KEY, \"hr_operator\")")); + assertTrue(controllerSource.contains("return ownMobileExtPartyId(requested);")); assertTrue(controllerSource.contains("@SaCheckLogin\npublic class AihrMobileController")); assertTrue(controllerSource.contains("@SaIgnore\n @GetMapping(\"/home/{role}\")")); assertTrue(controllerSource.contains("if (!LoginHelper.isLogin())")); diff --git a/docs/BRD_IMPLEMENTATION_AUDIT.md b/docs/BRD_IMPLEMENTATION_AUDIT.md index 7f99e4d2..5ff6974d 100644 --- a/docs/BRD_IMPLEMENTATION_AUDIT.md +++ b/docs/BRD_IMPLEMENTATION_AUDIT.md @@ -257,3 +257,4 @@ - 2026-07-14 BRD 发布边界复核:基于当前 `HEAD=0433250b` 重新构建管理端、`mobile-uni` H5 和后端 jar 后,`release-preflight.sh` 的产物新鲜度检查通过;线上根站与 `/h5/` 仍返回 `200`,但线上仍加载管理端 `assets/index-CJZ3Ax3Z.js`、H5 `assets/index-D4-NrEpb.js`,本地当前产物分别为 `assets/index-ClaGy0E5.js`、`assets/index-C5pwI-WO.js`。预检随后因两份用户未提交的 Figma 文档停止;本轮未修改、暂存或提交这两份文档,也未执行生产同步、后端重启或业务数据写入,因此当前 BRD 修复仍未被证明在线上生效。 - 2026-07-14 BRD 4.3.4 门禁补强:严格试点预检不再只按启用场景数量判断覆盖,新增“服务推介/增值”和“日常服务”场景存在性统计;当前仅增加事实检查,不臆造场景内容,场景成功条件、SOP 适用范围和正式质量仍需内容负责人确认。行为测试夹具已覆盖两类统计,严格门禁会在缺任一核心流程时明确失败。 - 2026-07-14 BRD G3 个人数据边界复核:移动端个人历史、错题、画像、晋升证据和任务读取共用 `ownMobileExtPartyId`;此前普通系统用户可传任意 `extPartyId`,绕过 HR/管理员角色读取员工个人数据。现统一要求系统用户具备 `superadmin` 或 `hr_operator`,APP 用户仍只使用登录手机号,主管团队接口继续走独立项目范围校验;补源码回归断言,未改变数据库或生产数据。 +- 2026-07-14 BRD G3 空身份路径复核:员工任务列表省略 `extPartyId` 时此前会进入空身份查询,普通系统用户可能看到当前租户任务集合;现与个人历史/画像共用同一身份归一化,APP 用户按登录手机号、HR/超级管理员按授权范围读取,普通系统用户直接拒绝;补回归断言,未改变数据库或生产数据。