| | |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import com.xiaopeng.account.service.ISysGroupMenuService; |
| | | import com.xiaopeng.account.service.ISysPermissionService; |
| | |
| | | * @return 菜单权限信息 |
| | | */ |
| | | @Override |
| | | public List<SysMenu> getMenuPermission(SysUser user) |
| | | public Set<String> getMenuPermission(SysUser user) |
| | | { |
| | | List<SysMenu> menus = new ArrayList<>(); |
| | | Set<String> perms = new HashSet<>(); |
| | | // 管理员拥有所有权限 |
| | | if (user.isAdmin()) { |
| | | perms.add("*:*:*"); |
| | | } else { |
| | | try { |
| | | // 1. 根据 userId 查询 sys_user_role 获取 roleId |
| | | SysUserRole userRole = userRoleService.selectSysUserRoleByUserId(user.getId()); |
| | | if (userRole == null || userRole.getRoleId() == null) { |
| | | log.warn("用户[{}]未分配角色", user.getId()); |
| | | return perms; |
| | | } |
| | | Long roleId = userRole.getRoleId(); |
| | | |
| | | try { |
| | | // 1. 根据 userId 查询 sys_user_role 获取 roleId |
| | | SysUserRole userRole = userRoleService.selectSysUserRoleByUserId(user.getId()); |
| | | if (userRole == null || userRole.getRoleId() == null) { |
| | | log.warn("用户[{}]未分配角色", user.getId()); |
| | | return menus; |
| | | // 2. 根据 roleId 查询 sys_role 获取 groupId |
| | | Long groupId = roleService.selectGroupIdByRoleId(roleId); |
| | | if (groupId == null) { |
| | | log.warn("角色[{}]未关联权限组", roleId); |
| | | return perms; |
| | | } |
| | | |
| | | // 3. 根据 groupId 查询 sys_group_menu 获取 menuId 列表 |
| | | List<Long> menuIds = groupMenuService.selectMenuIdsByGroupId(groupId); |
| | | if (menuIds == null || menuIds.isEmpty()) { |
| | | log.warn("权限组[{}]未配置菜单权限", groupId); |
| | | return perms; |
| | | } |
| | | |
| | | // 4. 通过 Feign 调用 operation 服务,根据 menuId 列表获取菜单列表 |
| | | R<List<SysMenu>> result = sysMenuClient.getMenusByMenuIds(menuIds); |
| | | if (R.isSuccess(result) && result.getData() != null) { |
| | | perms = result.getData().stream().map(item -> item.getId().toString()).collect(Collectors.toSet()); |
| | | } else { |
| | | log.error("调用菜单服务获取菜单列表失败: {}", result != null ? result.getMsg() : "返回结果为空"); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("获取用户[{}]菜单权限异常", user.getId(), e); |
| | | } |
| | | Long roleId = userRole.getRoleId(); |
| | | |
| | | // 2. 根据 roleId 查询 sys_role 获取 groupId |
| | | Long groupId = roleService.selectGroupIdByRoleId(roleId); |
| | | if (groupId == null) { |
| | | log.warn("角色[{}]未关联权限组", roleId); |
| | | return menus; |
| | | } |
| | | |
| | | // 3. 根据 groupId 查询 sys_group_menu 获取 menuId 列表 |
| | | List<Long> menuIds = groupMenuService.selectMenuIdsByGroupId(groupId); |
| | | if (menuIds == null || menuIds.isEmpty()) { |
| | | log.warn("权限组[{}]未配置菜单权限", groupId); |
| | | return menus; |
| | | } |
| | | |
| | | // 4. 通过 Feign 调用 operation 服务,根据 menuId 列表获取菜单列表 |
| | | R<List<SysMenu>> result = sysMenuClient.getMenusByMenuIds(menuIds); |
| | | if (R.isSuccess(result) && result.getData() != null) { |
| | | menus = result.getData(); |
| | | } else { |
| | | log.error("调用菜单服务获取菜单列表失败: {}", result != null ? result.getMsg() : "返回结果为空"); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("获取用户[{}]菜单权限异常", user.getId(), e); |
| | | } |
| | | |
| | | return menus; |
| | | |
| | | |
| | | return perms; |
| | | } |
| | | } |