Commit 823c26a567ca0fd916adc0d680c0176c812bffe2
1 parent
1345c663
批量提交一次迁移的代码
完成 get-info 接口,完成和前端 vue 的对接
Showing
16 changed files
with
205 additions
and
49 deletions
ruoyi-admin/src/main/resources/application.yml
| ... | ... | @@ -12,8 +12,6 @@ ruoyi: |
| 12 | 12 | profile: D:/ruoyi/uploadPath |
| 13 | 13 | # 获取ip地址开关 |
| 14 | 14 | addressEnabled: false |
| 15 | - # 验证码类型 math 数组计算 char 字符验证 | |
| 16 | - captchaType: math | |
| 17 | 15 | |
| 18 | 16 | # 开发环境配置 |
| 19 | 17 | server: |
| ... | ... | @@ -42,7 +40,7 @@ spring: |
| 42 | 40 | messages: |
| 43 | 41 | # 国际化资源文件路径 |
| 44 | 42 | basename: i18n/messages |
| 45 | - profiles: | |
| 43 | + profiles: | |
| 46 | 44 | active: druid |
| 47 | 45 | # 文件上传 |
| 48 | 46 | servlet: |
| ... | ... | @@ -59,13 +57,13 @@ spring: |
| 59 | 57 | # redis 配置 |
| 60 | 58 | redis: |
| 61 | 59 | # 地址 |
| 62 | - host: localhost | |
| 60 | + host: 127.0.0.1 | |
| 63 | 61 | # 端口,默认为6379 |
| 64 | 62 | port: 6379 |
| 65 | 63 | # 数据库索引 |
| 66 | 64 | database: 0 |
| 67 | 65 | # 密码 |
| 68 | - password: | |
| 66 | + password: | |
| 69 | 67 | # 连接超时时间 |
| 70 | 68 | timeout: 10s |
| 71 | 69 | lettuce: |
| ... | ... | @@ -79,15 +77,6 @@ spring: |
| 79 | 77 | # #连接池最大阻塞等待时间(使用负值表示没有限制) |
| 80 | 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 | 80 | # MyBatis配置 |
| 92 | 81 | mybatis: |
| 93 | 82 | # 搜索指定包别名 |
| ... | ... | @@ -98,11 +87,11 @@ mybatis: |
| 98 | 87 | configLocation: classpath:mybatis/mybatis-config.xml |
| 99 | 88 | |
| 100 | 89 | # PageHelper分页插件 |
| 101 | -pagehelper: | |
| 90 | +pagehelper: | |
| 102 | 91 | helperDialect: mysql |
| 103 | 92 | reasonable: true |
| 104 | 93 | supportMethodsArguments: true |
| 105 | - params: count=countSql | |
| 94 | + params: count=countSql | |
| 106 | 95 | |
| 107 | 96 | # Swagger配置 |
| 108 | 97 | swagger: |
| ... | ... | @@ -112,7 +101,7 @@ swagger: |
| 112 | 101 | pathMapping: /dev-api |
| 113 | 102 | |
| 114 | 103 | # 防止XSS攻击 |
| 115 | -xss: | |
| 104 | +xss: | |
| 116 | 105 | # 过滤开关 |
| 117 | 106 | enabled: true |
| 118 | 107 | # 排除链接(多个用逗号分隔) | ... | ... |
ruoyi-ui/src/store/modules/user.js
| ... | ... | @@ -51,7 +51,7 @@ const user = { |
| 51 | 51 | return new Promise((resolve, reject) => { |
| 52 | 52 | getInfo(state.token).then(res => { |
| 53 | 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 | 55 | if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 |
| 56 | 56 | commit('SET_ROLES', res.roles) |
| 57 | 57 | commit('SET_PERMISSIONS', res.permissions) |
| ... | ... | @@ -66,7 +66,7 @@ const user = { |
| 66 | 66 | }) |
| 67 | 67 | }) |
| 68 | 68 | }, |
| 69 | - | |
| 69 | + | |
| 70 | 70 | // 退出系统 |
| 71 | 71 | LogOut({ commit, state }) { |
| 72 | 72 | return new Promise((resolve, reject) => { | ... | ... |
src/main/java/cn/iocoder/dashboard/common/core/IntArrayValuable.java
0 → 100644
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 | 2 | |
| 3 | 3 | import io.swagger.annotations.ApiModel; |
| 4 | 4 | import io.swagger.annotations.ApiModelProperty; |
| 5 | +import lombok.AllArgsConstructor; | |
| 6 | +import lombok.Builder; | |
| 5 | 7 | import lombok.Data; |
| 8 | +import lombok.NoArgsConstructor; | |
| 6 | 9 | |
| 7 | 10 | import java.util.Set; |
| 8 | 11 | |
| 9 | 12 | @ApiModel("获得用户信息 Resp VO") |
| 10 | 13 | @Data |
| 14 | +@NoArgsConstructor | |
| 15 | +@AllArgsConstructor | |
| 16 | +@Builder | |
| 11 | 17 | public class SysAuthGetInfoRespVO { |
| 12 | 18 | |
| 19 | + @ApiModelProperty(value = "用户信息", required = true) | |
| 20 | + private UserVO user; | |
| 21 | + | |
| 13 | 22 | @ApiModelProperty(value = "角色权限数组", required = true) |
| 14 | 23 | private Set<String> roles; |
| 15 | 24 | |
| 16 | 25 | @ApiModelProperty(value = "菜单权限数组", required = true) |
| 17 | 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 | 22 | LoginUser convert(SysUserDO bean); |
| 23 | 23 | |
| 24 | 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 | 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 | 2 | |
| 3 | 3 | import cn.hutool.core.util.IdUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | |
| 5 | 6 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; |
| 6 | 7 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 7 | 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 | 13 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; |
| 13 | 14 | import cn.iocoder.dashboard.modules.system.dal.redis.dao.auth.SysLoginUserRedisDAO; |
| 14 | 15 | import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum; |
| 16 | +import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum; | |
| 15 | 17 | import cn.iocoder.dashboard.modules.system.enums.user.UserStatus; |
| 16 | 18 | import cn.iocoder.dashboard.modules.system.service.auth.SysAuthService; |
| 17 | 19 | import cn.iocoder.dashboard.modules.system.service.auth.SysTokenService; |
| ... | ... | @@ -19,6 +21,7 @@ import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionServi |
| 19 | 21 | import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; |
| 20 | 22 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; |
| 21 | 23 | import cn.iocoder.dashboard.util.collection.CollectionUtils; |
| 24 | +import cn.iocoder.dashboard.util.collection.SetUtils; | |
| 22 | 25 | import cn.iocoder.dashboard.util.date.DateUtils; |
| 23 | 26 | import io.jsonwebtoken.Claims; |
| 24 | 27 | import io.jsonwebtoken.JwtException; |
| ... | ... | @@ -231,22 +234,24 @@ public class SysAuthServiceImpl implements SysAuthService { |
| 231 | 234 | // 获得角色列表 |
| 232 | 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 | 241 | return SysAuthConvert.INSTANCE.convert(user, roleList, menuList); |
| 237 | 242 | } |
| 238 | 243 | |
| 239 | 244 | @Override |
| 240 | 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 | 249 | // 转换成 Tree 结构返回 |
| 244 | 250 | return buildRouterTree(menuList); |
| 245 | 251 | } |
| 246 | 252 | |
| 247 | 253 | private static List<SysAuthGetRouterRespVO> buildRouterTree(List<SysMenuDO> menuList) { |
| 248 | 254 | // 排序,保证菜单的有序性 |
| 249 | - menuList = new ArrayList<>(menuList); // 使用 ArrayList 套一下,因为 menuList 是不可修改的 List | |
| 250 | 255 | menuList.sort(Comparator.comparing(SysMenuDO::getOrderNum)); |
| 251 | 256 | // 构建菜单树 |
| 252 | 257 | // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysMenuService.java
| ... | ... | @@ -18,16 +18,25 @@ public interface SysMenuService { |
| 18 | 18 | /** |
| 19 | 19 | * 获得所有菜单,从缓存中 |
| 20 | 20 | * |
| 21 | + * 任一参数为空时,则返回为空 | |
| 22 | + * | |
| 23 | + * @param menuTypes 菜单类型数组 | |
| 24 | + * @param menusStatuses 菜单状态数组 | |
| 21 | 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 | 34 | * @param menuIds 菜单编号数组 |
| 35 | + * @param menuTypes 菜单类型数组 | |
| 36 | + * @param menusStatuses 菜单状态数组 | |
| 29 | 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 | 22 | /** |
| 23 | 23 | * 获得角色们拥有的菜单列表,从缓存中获取 |
| 24 | 24 | * |
| 25 | - * @param roleIds 角色编号素组 | |
| 25 | + * 任一参数为空时,则返回为空 | |
| 26 | + * | |
| 27 | + * @param roleIds 角色编号数组 | |
| 28 | + * @param menuTypes 菜单类型数组 | |
| 29 | + * @param menusStatuses 菜单状态数组 | |
| 26 | 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 | 1 | package cn.iocoder.dashboard.modules.system.service.permission.impl; |
| 2 | 2 | |
| 3 | -import cn.hutool.core.collection.CollectionUtil; | |
| 4 | 3 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysMenuMapper; |
| 5 | 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; |
| 6 | 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 | 7 | import com.google.common.collect.ImmutableMap; |
| 9 | 8 | import com.google.common.collect.ImmutableMultimap; |
| 10 | 9 | import com.google.common.collect.Multimap; |
| ... | ... | @@ -13,10 +12,7 @@ import org.springframework.stereotype.Service; |
| 13 | 12 | |
| 14 | 13 | import javax.annotation.PostConstruct; |
| 15 | 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 | 16 | import java.util.stream.Collectors; |
| 21 | 17 | |
| 22 | 18 | /** |
| ... | ... | @@ -64,18 +60,27 @@ public class SysMenuServiceImpl implements SysMenuService { |
| 64 | 60 | } |
| 65 | 61 | |
| 66 | 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 | 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 | 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 | 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 | 17 | import javax.annotation.PostConstruct; |
| 18 | 18 | import javax.annotation.Resource; |
| 19 | 19 | import java.util.Collection; |
| 20 | +import java.util.Collections; | |
| 20 | 21 | import java.util.List; |
| 21 | 22 | |
| 22 | 23 | /** |
| ... | ... | @@ -77,16 +78,21 @@ public class SysPermissionServiceImpl implements SysPermissionService { |
| 77 | 78 | } |
| 78 | 79 | |
| 79 | 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 | 88 | List<SysRoleDO> roleList = roleService.listRolesFromCache(roleIds); |
| 83 | 89 | boolean hasAdmin = roleService.hasAnyAdmin(roleList); |
| 84 | 90 | // 获得角色拥有的菜单关联 |
| 85 | 91 | if (hasAdmin) { // 管理员,获取到全部 |
| 86 | - return menuService.listMenusFromCache(); | |
| 92 | + return menuService.listMenusFromCache(menuTypes, menusStatuses); | |
| 87 | 93 | } |
| 88 | 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 | 98 | @Override | ... | ... |
src/main/java/cn/iocoder/dashboard/util/collection/CollectionUtils.java
| ... | ... | @@ -14,8 +14,8 @@ import java.util.stream.Collectors; |
| 14 | 14 | */ |
| 15 | 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 | 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 | +} | ... | ... |