diff --git a/src/main/java/com/yunhai/userbase/service/impl/GroupAuthzService.java b/src/main/java/com/yunhai/userbase/service/impl/GroupAuthzService.java index 5196c6b..d6a1827 100644 --- a/src/main/java/com/yunhai/userbase/service/impl/GroupAuthzService.java +++ b/src/main/java/com/yunhai/userbase/service/impl/GroupAuthzService.java @@ -611,17 +611,14 @@ public class GroupAuthzService implements IGroupAuthzService { allChainIds.addAll(chain); } - // 3. 收集这些组已开通的应用 + // 3. 收集「用户归属组 + 其祖先链」所有组已开通的应用并集。 + // 安全:hasUserModulePermission 仍会判定 groupId(当前归属组)必须在 openedApps 链上(即归属组或其祖先开通应用), + // 不会出现“无组归属、父级未开”的越权;此处只是把过滤和写面板(GroupModuleTreeByCategory)联动对齐, + // 解决之前“管理员在组8面板勾了checked=true,但UserPermissionTree返回空”的对称bug。 Map> groupToApps = new HashMap<>(); Set allAppIds = new LinkedHashSet<>(); for (Integer groupIdItem : selfGroupIds) { - List appRels = sysGroupAppRelRepository.findByGroupId(groupIdItem); - Set apps = new LinkedHashSet<>(); - for (SysGroupAppRel rel : appRels) { - if (rel.getAppId() != null) { - apps.add(rel.getAppId()); - } - } + Set apps = collectAppIdsForAuthzScope(groupIdItem); groupToApps.put(groupIdItem, apps); allAppIds.addAll(apps); }