diff --git a/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java index cfce95d..5c8b052 100644 --- a/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java @@ -12,9 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -109,6 +107,32 @@ public class MenuServiceImpl implements MenuService { } if(roleVo.getMenuIds() == null||roleVo.getMenuIds().isEmpty()) { return Result.error("角色权限为空"); + }else + { + List menuIds = new ArrayList<>(roleVo.getMenuIds()); // 创建副本避免修改原始列表 + Set processedIds = new HashSet<>(menuIds); // 使用Set快速检查存在性 + + // 处理每个菜单ID及其所有父菜单 + for (int i = 0; i < menuIds.size(); i++) { + Integer currentId = menuIds.get(i); + + // ID为1不处理 + if (currentId == 1) continue; + + // 获取父菜单ID + Integer fatherId = menuMapper.selectFatherId(currentId); + + // 递归添加所有父菜单 + while (fatherId != null) { + if (!processedIds.contains(fatherId)) { + menuIds.add(fatherId); + processedIds.add(fatherId); + } + // 继续向上查找父菜单的父菜单 + fatherId = menuMapper.selectFatherId(fatherId); + } + } + roleVo.setMenuIds(menuIds); } if(roleMapper.selectByRoleId(roleVo.getId())==null){ return Result.error("角色不存在");