Commit 823c26a567ca0fd916adc0d680c0176c812bffe2

Authored by YunaiV
1 parent 1345c663

批量提交一次迁移的代码

完成 get-info 接口,完成和前端 vue 的对接
ruoyi-admin/src/main/resources/application.yml
@@ -12,8 +12,6 @@ ruoyi: @@ -12,8 +12,6 @@ ruoyi:
12 profile: D:/ruoyi/uploadPath 12 profile: D:/ruoyi/uploadPath
13 # 获取ip地址开关 13 # 获取ip地址开关
14 addressEnabled: false 14 addressEnabled: false
15 - # 验证码类型 math 数组计算 char 字符验证  
16 - captchaType: math  
17 15
18 # 开发环境配置 16 # 开发环境配置
19 server: 17 server:
@@ -42,7 +40,7 @@ spring: @@ -42,7 +40,7 @@ spring:
42 messages: 40 messages:
43 # 国际化资源文件路径 41 # 国际化资源文件路径
44 basename: i18n/messages 42 basename: i18n/messages
45 - profiles: 43 + profiles:
46 active: druid 44 active: druid
47 # 文件上传 45 # 文件上传
48 servlet: 46 servlet:
@@ -59,13 +57,13 @@ spring: @@ -59,13 +57,13 @@ spring:
59 # redis 配置 57 # redis 配置
60 redis: 58 redis:
61 # 地址 59 # 地址
62 - host: localhost 60 + host: 127.0.0.1
63 # 端口,默认为6379 61 # 端口,默认为6379
64 port: 6379 62 port: 6379
65 # 数据库索引 63 # 数据库索引
66 database: 0 64 database: 0
67 # 密码 65 # 密码
68 - password: 66 + password:
69 # 连接超时时间 67 # 连接超时时间
70 timeout: 10s 68 timeout: 10s
71 lettuce: 69 lettuce:
@@ -79,15 +77,6 @@ spring: @@ -79,15 +77,6 @@ spring:
79 # #连接池最大阻塞等待时间(使用负值表示没有限制) 77 # #连接池最大阻塞等待时间(使用负值表示没有限制)
80 max-wait: -1ms 78 max-wait: -1ms
81 79
82 -# token配置  
83 -token:  
84 - # 令牌自定义标识  
85 - header: Authorization  
86 - # 令牌密钥  
87 - secret: abcdefghijklmnopqrstuvwxyz  
88 - # 令牌有效期(默认30分钟)  
89 - expireTime: 30  
90 -  
91 # MyBatis配置 80 # MyBatis配置
92 mybatis: 81 mybatis:
93 # 搜索指定包别名 82 # 搜索指定包别名
@@ -98,11 +87,11 @@ mybatis: @@ -98,11 +87,11 @@ mybatis:
98 configLocation: classpath:mybatis/mybatis-config.xml 87 configLocation: classpath:mybatis/mybatis-config.xml
99 88
100 # PageHelper分页插件 89 # PageHelper分页插件
101 -pagehelper: 90 +pagehelper:
102 helperDialect: mysql 91 helperDialect: mysql
103 reasonable: true 92 reasonable: true
104 supportMethodsArguments: true 93 supportMethodsArguments: true
105 - params: count=countSql 94 + params: count=countSql
106 95
107 # Swagger配置 96 # Swagger配置
108 swagger: 97 swagger:
@@ -112,7 +101,7 @@ swagger: @@ -112,7 +101,7 @@ swagger:
112 pathMapping: /dev-api 101 pathMapping: /dev-api
113 102
114 # 防止XSS攻击 103 # 防止XSS攻击
115 -xss: 104 +xss:
116 # 过滤开关 105 # 过滤开关
117 enabled: true 106 enabled: true
118 # 排除链接(多个用逗号分隔) 107 # 排除链接(多个用逗号分隔)
ruoyi-ui/src/store/modules/user.js
@@ -51,7 +51,7 @@ const user = { @@ -51,7 +51,7 @@ const user = {
51 return new Promise((resolve, reject) => { 51 return new Promise((resolve, reject) => {
52 getInfo(state.token).then(res => { 52 getInfo(state.token).then(res => {
53 const user = res.user 53 const user = res.user
54 - const avatar = user.avatar == "" ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; 54 + const avatar = user.avatar === "" ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar;
55 if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 55 if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
56 commit('SET_ROLES', res.roles) 56 commit('SET_ROLES', res.roles)
57 commit('SET_PERMISSIONS', res.permissions) 57 commit('SET_PERMISSIONS', res.permissions)
@@ -66,7 +66,7 @@ const user = { @@ -66,7 +66,7 @@ const user = {
66 }) 66 })
67 }) 67 })
68 }, 68 },
69 - 69 +
70 // 退出系统 70 // 退出系统
71 LogOut({ commit, state }) { 71 LogOut({ commit, state }) {
72 return new Promise((resolve, reject) => { 72 return new Promise((resolve, reject) => {
src/main/java/cn/iocoder/dashboard/common/core/IntArrayValuable.java 0 → 100644
  1 +package cn.iocoder.dashboard.common.core;
  2 +
  3 +/**
  4 + * 可生成 Int 数组的接口
  5 + *
  6 + * @author 芋道源码
  7 + */
  8 +public interface IntArrayValuable {
  9 +
  10 + /**
  11 + * @return int 数组
  12 + */
  13 + int[] array();
  14 +
  15 +}
src/main/java/cn/iocoder/dashboard/common/enums/CommonStatusEnum.java 0 → 100644
  1 +package cn.iocoder.dashboard.common.enums;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +
  6 +/**
  7 + * 通用状态枚举
  8 + *
  9 + * @author 芋道源码
  10 + */
  11 +@Getter
  12 +@AllArgsConstructor
  13 +public enum CommonStatusEnum {
  14 +
  15 + ENABLE("0", "开启"),
  16 + DISABLE("1", "关闭");
  17 +
  18 + /**
  19 + * 状态值
  20 + */
  21 + private final String status;
  22 + /**
  23 + * 状态名
  24 + */
  25 + private final String name;
  26 +
  27 +}
src/main/java/cn/iocoder/dashboard/framework/datasource/DataSourceConfiguration.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.datasource;
  2 +
  3 +import org.springframework.context.annotation.Configuration;
  4 +import org.springframework.transaction.annotation.EnableTransactionManagement;
  5 +
  6 +/**
  7 + * 数据库匹配类
  8 + */
  9 +@Configuration
  10 +@EnableTransactionManagement(proxyTargetClass = true) // 启动事务管理
  11 +public class DataSourceConfiguration {
  12 +}
src/main/java/cn/iocoder/dashboard/framework/mybatis/config/MybatisConfiguration.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.mybatis.config;
  2 +
  3 +import org.apache.ibatis.annotations.Mapper;
  4 +import org.mybatis.spring.annotation.MapperScan;
  5 +import org.springframework.context.annotation.Configuration;
  6 +
  7 +/**
  8 + * MyBaits 配置类
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +@Configuration
  13 +@MapperScan(value = "cn.iocoder.dashboard", annotationClass = Mapper.class)
  14 +public class MybatisConfiguration {
  15 +}
src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthGetInfoRespVO.java
@@ -2,18 +2,42 @@ package cn.iocoder.dashboard.modules.system.controller.auth.vo; @@ -2,18 +2,42 @@ package cn.iocoder.dashboard.modules.system.controller.auth.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.AllArgsConstructor;
  6 +import lombok.Builder;
5 import lombok.Data; 7 import lombok.Data;
  8 +import lombok.NoArgsConstructor;
6 9
7 import java.util.Set; 10 import java.util.Set;
8 11
9 @ApiModel("获得用户信息 Resp VO") 12 @ApiModel("获得用户信息 Resp VO")
10 @Data 13 @Data
  14 +@NoArgsConstructor
  15 +@AllArgsConstructor
  16 +@Builder
11 public class SysAuthGetInfoRespVO { 17 public class SysAuthGetInfoRespVO {
12 18
  19 + @ApiModelProperty(value = "用户信息", required = true)
  20 + private UserVO user;
  21 +
13 @ApiModelProperty(value = "角色权限数组", required = true) 22 @ApiModelProperty(value = "角色权限数组", required = true)
14 private Set<String> roles; 23 private Set<String> roles;
15 24
16 @ApiModelProperty(value = "菜单权限数组", required = true) 25 @ApiModelProperty(value = "菜单权限数组", required = true)
17 private Set<String> permissions; 26 private Set<String> permissions;
18 27
  28 + @ApiModel("用户信息 VO")
  29 + @Data
  30 + @NoArgsConstructor
  31 + @AllArgsConstructor
  32 + @Builder
  33 + public static class UserVO {
  34 +
  35 + @ApiModelProperty(value = "用户昵称", required = true, example = "芋道源码")
  36 + private String nickname;
  37 +
  38 + @ApiModelProperty(value = "用户头像", required = true, example = "http://www.iocoder.cn/xx.jpg")
  39 + private String avatar;
  40 +
  41 + }
  42 +
19 } 43 }
src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java
@@ -22,10 +22,11 @@ public interface SysAuthConvert { @@ -22,10 +22,11 @@ public interface SysAuthConvert {
22 LoginUser convert(SysUserDO bean); 22 LoginUser convert(SysUserDO bean);
23 23
24 default SysAuthGetInfoRespVO convert(SysUserDO user, List<SysRoleDO> roleList, List<SysMenuDO> menuList) { 24 default SysAuthGetInfoRespVO convert(SysUserDO user, List<SysRoleDO> roleList, List<SysMenuDO> menuList) {
25 - SysAuthGetInfoRespVO respVO = new SysAuthGetInfoRespVO();  
26 - respVO.setRoles(CollectionUtils.convertSet(roleList, SysRoleDO::getRoleKey));  
27 - respVO.setPermissions(CollectionUtils.convertSet(menuList, SysMenuDO::getPerms));  
28 - return respVO; 25 + return SysAuthGetInfoRespVO.builder()
  26 + .user(SysAuthGetInfoRespVO.UserVO.builder().nickname(user.getNickname()).avatar(user.getAvatar()).build())
  27 + .roles(CollectionUtils.convertSet(roleList, SysRoleDO::getRoleKey))
  28 + .permissions(CollectionUtils.convertSet(menuList, SysMenuDO::getPerms))
  29 + .build();
29 } 30 }
30 31
31 SysAuthGetRouterRespVO convertTreeNode(SysMenuDO menu); 32 SysAuthGetRouterRespVO convertTreeNode(SysMenuDO menu);
src/main/java/cn/iocoder/dashboard/modules/system/enums/permission/MenuTypeEnum.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.system.enums.permission;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +
  6 +/**
  7 + * 菜单类型枚举类
  8 + *
  9 + * @author 芋道源码
  10 + */
  11 +@Getter
  12 +@AllArgsConstructor
  13 +public enum MenuTypeEnum {
  14 +
  15 + DIR("M"), // 目录
  16 + MENU("C"), // 菜单
  17 + BUTTON("F") // 按钮
  18 + ;
  19 +
  20 + /**
  21 + * 类型
  22 + */
  23 + private final String type;
  24 +
  25 +}
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -2,6 +2,7 @@ package cn.iocoder.dashboard.modules.system.service.auth.impl; @@ -2,6 +2,7 @@ package cn.iocoder.dashboard.modules.system.service.auth.impl;
2 2
3 import cn.hutool.core.util.IdUtil; 3 import cn.hutool.core.util.IdUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
  5 +import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
5 import cn.iocoder.dashboard.framework.security.config.SecurityProperties; 6 import cn.iocoder.dashboard.framework.security.config.SecurityProperties;
6 import cn.iocoder.dashboard.framework.security.core.LoginUser; 7 import cn.iocoder.dashboard.framework.security.core.LoginUser;
7 import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO; 8 import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO;
@@ -12,6 +13,7 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRo @@ -12,6 +13,7 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRo
12 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; 13 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO;
13 import cn.iocoder.dashboard.modules.system.dal.redis.dao.auth.SysLoginUserRedisDAO; 14 import cn.iocoder.dashboard.modules.system.dal.redis.dao.auth.SysLoginUserRedisDAO;
14 import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum; 15 import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum;
  16 +import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum;
15 import cn.iocoder.dashboard.modules.system.enums.user.UserStatus; 17 import cn.iocoder.dashboard.modules.system.enums.user.UserStatus;
16 import cn.iocoder.dashboard.modules.system.service.auth.SysAuthService; 18 import cn.iocoder.dashboard.modules.system.service.auth.SysAuthService;
17 import cn.iocoder.dashboard.modules.system.service.auth.SysTokenService; 19 import cn.iocoder.dashboard.modules.system.service.auth.SysTokenService;
@@ -19,6 +21,7 @@ import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionServi @@ -19,6 +21,7 @@ import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionServi
19 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; 21 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService;
20 import cn.iocoder.dashboard.modules.system.service.user.SysUserService; 22 import cn.iocoder.dashboard.modules.system.service.user.SysUserService;
21 import cn.iocoder.dashboard.util.collection.CollectionUtils; 23 import cn.iocoder.dashboard.util.collection.CollectionUtils;
  24 +import cn.iocoder.dashboard.util.collection.SetUtils;
22 import cn.iocoder.dashboard.util.date.DateUtils; 25 import cn.iocoder.dashboard.util.date.DateUtils;
23 import io.jsonwebtoken.Claims; 26 import io.jsonwebtoken.Claims;
24 import io.jsonwebtoken.JwtException; 27 import io.jsonwebtoken.JwtException;
@@ -231,22 +234,24 @@ public class SysAuthServiceImpl implements SysAuthService { @@ -231,22 +234,24 @@ public class SysAuthServiceImpl implements SysAuthService {
231 // 获得角色列表 234 // 获得角色列表
232 List<SysRoleDO> roleList = roleService.listRolesFromCache(roleIds); 235 List<SysRoleDO> roleList = roleService.listRolesFromCache(roleIds);
233 // 获得菜单列表 236 // 获得菜单列表
234 - List<SysMenuDO> menuList = permissionService.listRoleMenusFromCache(roleIds); 237 + List<SysMenuDO> menuList = permissionService.listRoleMenusFromCache(roleIds,
  238 + SetUtils.asSet(MenuTypeEnum.DIR.getType(), MenuTypeEnum.MENU.getType(), MenuTypeEnum.BUTTON.getType()),
  239 + SetUtils.asSet(CommonStatusEnum.ENABLE.getStatus()));
235 // 拼接结果返回 240 // 拼接结果返回
236 return SysAuthConvert.INSTANCE.convert(user, roleList, menuList); 241 return SysAuthConvert.INSTANCE.convert(user, roleList, menuList);
237 } 242 }
238 243
239 @Override 244 @Override
240 public List<SysAuthGetRouterRespVO> getRouters(Long userId, Set<Long> roleIds) { 245 public List<SysAuthGetRouterRespVO> getRouters(Long userId, Set<Long> roleIds) {
241 - // TODO 芋艿:去除 F 的类型,去除 禁用 的  
242 - List<SysMenuDO> menuList = permissionService.listRoleMenusFromCache(roleIds); 246 + List<SysMenuDO> menuList = permissionService.listRoleMenusFromCache(roleIds,
  247 + SetUtils.asSet(MenuTypeEnum.DIR.getType(), MenuTypeEnum.MENU.getType()),
  248 + SetUtils.asSet(CommonStatusEnum.ENABLE.getStatus()));
243 // 转换成 Tree 结构返回 249 // 转换成 Tree 结构返回
244 return buildRouterTree(menuList); 250 return buildRouterTree(menuList);
245 } 251 }
246 252
247 private static List<SysAuthGetRouterRespVO> buildRouterTree(List<SysMenuDO> menuList) { 253 private static List<SysAuthGetRouterRespVO> buildRouterTree(List<SysMenuDO> menuList) {
248 // 排序,保证菜单的有序性 254 // 排序,保证菜单的有序性
249 - menuList = new ArrayList<>(menuList); // 使用 ArrayList 套一下,因为 menuList 是不可修改的 List  
250 menuList.sort(Comparator.comparing(SysMenuDO::getOrderNum)); 255 menuList.sort(Comparator.comparing(SysMenuDO::getOrderNum));
251 // 构建菜单树 256 // 构建菜单树
252 // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 257 // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysMenuService.java
@@ -18,16 +18,25 @@ public interface SysMenuService { @@ -18,16 +18,25 @@ public interface SysMenuService {
18 /** 18 /**
19 * 获得所有菜单,从缓存中 19 * 获得所有菜单,从缓存中
20 * 20 *
  21 + * 任一参数为空时,则返回为空
  22 + *
  23 + * @param menuTypes 菜单类型数组
  24 + * @param menusStatuses 菜单状态数组
21 * @return 菜单列表 25 * @return 菜单列表
22 */ 26 */
23 - List<SysMenuDO> listMenusFromCache(); 27 + List<SysMenuDO> listMenusFromCache(Collection<String> menuTypes, Collection<String> menusStatuses);
24 28
25 /** 29 /**
26 * 获得指定编号的菜单数组,从缓存中 30 * 获得指定编号的菜单数组,从缓存中
27 * 31 *
  32 + * 任一参数为空时,则返回为空
  33 + *
28 * @param menuIds 菜单编号数组 34 * @param menuIds 菜单编号数组
  35 + * @param menuTypes 菜单类型数组
  36 + * @param menusStatuses 菜单状态数组
29 * @return 菜单数组 37 * @return 菜单数组
30 */ 38 */
31 - List<SysMenuDO> listMenusFromCache(Collection<Long> menuIds); 39 + List<SysMenuDO> listMenusFromCache(Collection<Long> menuIds, Collection<String> menuTypes,
  40 + Collection<String> menusStatuses);
32 41
33 } 42 }
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysPermissionService.java
@@ -22,10 +22,15 @@ public interface SysPermissionService { @@ -22,10 +22,15 @@ public interface SysPermissionService {
22 /** 22 /**
23 * 获得角色们拥有的菜单列表,从缓存中获取 23 * 获得角色们拥有的菜单列表,从缓存中获取
24 * 24 *
25 - * @param roleIds 角色编号素组 25 + * 任一参数为空时,则返回为空
  26 + *
  27 + * @param roleIds 角色编号数组
  28 + * @param menuTypes 菜单类型数组
  29 + * @param menusStatuses 菜单状态数组
26 * @return 菜单列表 30 * @return 菜单列表
27 */ 31 */
28 - List<SysMenuDO> listRoleMenusFromCache(Collection<Long> roleIds); 32 + List<SysMenuDO> listRoleMenusFromCache(Collection<Long> roleIds, Collection<String> menuTypes,
  33 + Collection<String> menusStatuses);
29 34
30 /** 35 /**
31 * 获得用户拥有的角色编号数组 36 * 获得用户拥有的角色编号数组
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java
1 package cn.iocoder.dashboard.modules.system.service.permission.impl; 1 package cn.iocoder.dashboard.modules.system.service.permission.impl;
2 2
3 -import cn.hutool.core.collection.CollectionUtil;  
4 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysMenuMapper; 3 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysMenuMapper;
5 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; 4 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO;
6 import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; 5 import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService;
7 -import com.google.common.collect.ImmutableList; 6 +import cn.iocoder.dashboard.util.collection.CollectionUtils;
8 import com.google.common.collect.ImmutableMap; 7 import com.google.common.collect.ImmutableMap;
9 import com.google.common.collect.ImmutableMultimap; 8 import com.google.common.collect.ImmutableMultimap;
10 import com.google.common.collect.Multimap; 9 import com.google.common.collect.Multimap;
@@ -13,10 +12,7 @@ import org.springframework.stereotype.Service; @@ -13,10 +12,7 @@ import org.springframework.stereotype.Service;
13 12
14 import javax.annotation.PostConstruct; 13 import javax.annotation.PostConstruct;
15 import javax.annotation.Resource; 14 import javax.annotation.Resource;
16 -import java.util.Collection;  
17 -import java.util.Collections;  
18 -import java.util.List;  
19 -import java.util.Map; 15 +import java.util.*;
20 import java.util.stream.Collectors; 16 import java.util.stream.Collectors;
21 17
22 /** 18 /**
@@ -64,18 +60,27 @@ public class SysMenuServiceImpl implements SysMenuService { @@ -64,18 +60,27 @@ public class SysMenuServiceImpl implements SysMenuService {
64 } 60 }
65 61
66 @Override 62 @Override
67 - public List<SysMenuDO> listMenusFromCache() {  
68 - // Guava ImmutableMap 对应的 value 类型为 ImmutableCollection  
69 - // 而 ImmutableList 在 copyof 时,如果入参类型为 ImmutableCollection 时,会进行包装,而不会进行复制。  
70 - return ImmutableList.copyOf(menuCache.values()); 63 + public List<SysMenuDO> listMenusFromCache(Collection<String> menuTypes, Collection<String> menusStatuses) {
  64 + // 任一一个参数为空,则返回空
  65 + if (CollectionUtils.isAnyEmpty(menuTypes, menusStatuses)) {
  66 + return Collections.emptyList();
  67 + }
  68 + // 创建新数组,避免缓存被修改
  69 + return menuCache.values().stream().filter(menu -> menuTypes.contains(menu.getMenuType())
  70 + && menusStatuses.contains(menu.getStatus()))
  71 + .collect(Collectors.toList());
71 } 72 }
72 73
73 @Override 74 @Override
74 - public List<SysMenuDO> listMenusFromCache(Collection<Long> menuIds) {  
75 - if (CollectionUtil.isEmpty(menuIds)) { 75 + public List<SysMenuDO> listMenusFromCache(Collection<Long> menuIds, Collection<String> menuTypes,
  76 + Collection<String> menusStatuses) {
  77 + // 任一一个参数为空,则返回空
  78 + if (CollectionUtils.isAnyEmpty(menuIds, menuTypes, menusStatuses)) {
76 return Collections.emptyList(); 79 return Collections.emptyList();
77 } 80 }
78 - return menuCache.values().stream().filter(menuDO -> menuIds.contains(menuDO.getMenuId())) 81 + return menuCache.values().stream().filter(menu -> menuIds.contains(menu.getMenuId())
  82 + && menuTypes.contains(menu.getMenuType())
  83 + && menusStatuses.contains(menu.getStatus()))
79 .collect(Collectors.toList()); 84 .collect(Collectors.toList());
80 } 85 }
81 } 86 }
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysPermissionServiceImpl.java
@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service; @@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
17 import javax.annotation.PostConstruct; 17 import javax.annotation.PostConstruct;
18 import javax.annotation.Resource; 18 import javax.annotation.Resource;
19 import java.util.Collection; 19 import java.util.Collection;
  20 +import java.util.Collections;
20 import java.util.List; 21 import java.util.List;
21 22
22 /** 23 /**
@@ -77,16 +78,21 @@ public class SysPermissionServiceImpl implements SysPermissionService { @@ -77,16 +78,21 @@ public class SysPermissionServiceImpl implements SysPermissionService {
77 } 78 }
78 79
79 @Override 80 @Override
80 - public List<SysMenuDO> listRoleMenusFromCache(Collection<Long> roleIds) { 81 + public List<SysMenuDO> listRoleMenusFromCache(Collection<Long> roleIds, Collection<String> menuTypes,
  82 + Collection<String> menusStatuses) {
  83 + // 任一一个参数为空时,不返回任何菜单
  84 + if (CollectionUtils.isAnyEmpty(roleIds, menusStatuses, menusStatuses)) {
  85 + return Collections.emptyList();
  86 + }
81 // 判断角色是否包含管理员 87 // 判断角色是否包含管理员
82 List<SysRoleDO> roleList = roleService.listRolesFromCache(roleIds); 88 List<SysRoleDO> roleList = roleService.listRolesFromCache(roleIds);
83 boolean hasAdmin = roleService.hasAnyAdmin(roleList); 89 boolean hasAdmin = roleService.hasAnyAdmin(roleList);
84 // 获得角色拥有的菜单关联 90 // 获得角色拥有的菜单关联
85 if (hasAdmin) { // 管理员,获取到全部 91 if (hasAdmin) { // 管理员,获取到全部
86 - return menuService.listMenusFromCache(); 92 + return menuService.listMenusFromCache(menuTypes, menusStatuses);
87 } 93 }
88 List<Long> menuIds = MapUtils.getList(roleMenuCache, roleIds); 94 List<Long> menuIds = MapUtils.getList(roleMenuCache, roleIds);
89 - return menuService.listMenusFromCache(menuIds); 95 + return menuService.listMenusFromCache(menuIds, menuTypes, menusStatuses);
90 } 96 }
91 97
92 @Override 98 @Override
src/main/java/cn/iocoder/dashboard/util/collection/CollectionUtils.java
@@ -14,8 +14,8 @@ import java.util.stream.Collectors; @@ -14,8 +14,8 @@ import java.util.stream.Collectors;
14 */ 14 */
15 public class CollectionUtils { 15 public class CollectionUtils {
16 16
17 - public static <T> Set<T> asSet(T... objs) {  
18 - return new HashSet<>(Arrays.asList(objs)); 17 + public static boolean isAnyEmpty(Collection<?>... collections) {
  18 + return Arrays.stream(collections).anyMatch(CollectionUtil::isEmpty);
19 } 19 }
20 20
21 public static <T> List<T> filterList(Collection<T> from, Predicate<T> predicate) { 21 public static <T> List<T> filterList(Collection<T> from, Predicate<T> predicate) {
src/main/java/cn/iocoder/dashboard/util/collection/SetUtils.java 0 → 100644
  1 +package cn.iocoder.dashboard.util.collection;
  2 +
  3 +import java.util.Arrays;
  4 +import java.util.HashSet;
  5 +import java.util.Set;
  6 +
  7 +/**
  8 + * Set 工具类
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public class SetUtils {
  13 +
  14 + public static <T> Set<T> asSet(T... objs) {
  15 + return new HashSet<>(Arrays.asList(objs));
  16 + }
  17 +
  18 +}