From 6d96d90432ac4c923258bef43c60cde5ab96c200 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 31 May 2024 15:52:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=BA=A2=E5=B1=B1=E8=A3=81=E5=89=AA):=20=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E6=8E=89=E6=B5=81=E6=B0=B4=E7=BA=BF=E3=80=81=E5=88=B6=E5=93=81?= =?UTF-8?q?=E5=BA=93=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 通过Nacos增加配置项,可设置需屏蔽的菜单标识 2. 菜单被屏蔽则用户在菜单栏及权限分配时屏蔽相关菜单 3. 在权限判断时对被屏蔽菜单进行拦截 --- .../controller/SysDeptRoleController.java | 17 +------------- .../system/service/ISysDeptRoleService.java | 10 +++++++++ .../service/impl/SysDeptRoleServiceImpl.java | 18 +++++++++++++++ .../service/impl/SysMenuServiceImpl.java | 22 +++++++++++++++++-- 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/controller/SysDeptRoleController.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/controller/SysDeptRoleController.java index ca8f07bfe..1e8a40f67 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/controller/SysDeptRoleController.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/controller/SysDeptRoleController.java @@ -9,11 +9,9 @@ import com.microservices.common.log.enums.BusinessType; import com.microservices.common.security.annotation.Logical; import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.system.api.domain.SysRole; -import com.microservices.system.domain.SysMenu; import com.microservices.system.domain.vo.SysRoleInputVo; import com.microservices.system.domain.vo.SysRoleUpdateVo; import com.microservices.system.service.ISysDeptRoleService; -import com.microservices.system.service.ISysMenuService; import com.microservices.system.service.ISysRoleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -22,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.List; /** @@ -39,8 +36,6 @@ public class SysDeptRoleController extends BaseController { @Autowired private ISysDeptRoleService sysDeptRoleService; @Autowired - private ISysMenuService menuService; - @Autowired private ISysRoleService roleService; /** @@ -114,17 +109,7 @@ public class SysDeptRoleController extends BaseController { @ApiOperation("查看角色对应菜单列表树") public AjaxResult roleMenuTreeSelect(@PathVariable Long currentDeptId, @ApiParam(value = "角色Id") Long roleId) { - List menus = menuService.selectMenuList(new SysMenu()); - AjaxResult ajax = AjaxResult.success(); - List checkedKeys; - if (roleId != null) { - checkedKeys = menuService.selectMenuListByRoleId(roleId); - } else { - checkedKeys = new ArrayList<>(); - } - ajax.put("checkedKeys", checkedKeys); - ajax.put("menus", menuService.buildMenuTreeSelect(menus)); - return ajax; + return sysDeptRoleService.roleMenuTreeSelect(currentDeptId, roleId); } /** diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysDeptRoleService.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysDeptRoleService.java index 8e5702813..8d367b8a7 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysDeptRoleService.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysDeptRoleService.java @@ -1,5 +1,6 @@ package com.microservices.system.service; +import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.system.api.domain.SysDept; import com.microservices.system.api.domain.SysRole; import com.microservices.system.domain.vo.SysRoleInputVo; @@ -110,4 +111,13 @@ public interface ISysDeptRoleService { * @return 更新结果 */ int updateSysRole(Long deptId, SysRole sysRole); + + /** + * 查看角色对应菜单列表树 + * + * @param currentDeptId 组织id + * @param roleId 角色id + * @return 结果 + */ + AjaxResult roleMenuTreeSelect(Long currentDeptId, Long roleId); } diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysDeptRoleServiceImpl.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysDeptRoleServiceImpl.java index 9591fc76f..642426473 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysDeptRoleServiceImpl.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysDeptRoleServiceImpl.java @@ -5,6 +5,7 @@ import com.microservices.common.core.enums.SystemRole; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.uuid.IdUtils; +import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.system.api.domain.SysDept; import com.microservices.system.api.domain.SysRole; @@ -46,6 +47,8 @@ public class SysDeptRoleServiceImpl implements ISysDeptRoleService { private SysUserDeptRoleMapper sysUserDeptRoleMapper; @Autowired private ISysMenuService sysMenuService; + @Autowired + private ISysMenuService menuService; @Override public SysDept selectSysDeptById(Long deptId) { @@ -165,6 +168,21 @@ public class SysDeptRoleServiceImpl implements ISysDeptRoleService { return roleService.updateRole(role); } + @Override + public AjaxResult roleMenuTreeSelect(Long currentDeptId, Long roleId) { + List menus = menuService.selectMenuList(new SysMenu()); + AjaxResult ajax = AjaxResult.success(); + List checkedKeys; + if (roleId != null) { + checkedKeys = menuService.selectMenuListByRoleId(roleId); + } else { + checkedKeys = new ArrayList<>(); + } + ajax.put("checkedKeys", checkedKeys); + ajax.put("menus", menuService.buildMenuTreeSelect(menus)); + return ajax; + } + @Override @Transactional(rollbackFor = Exception.class) diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysMenuServiceImpl.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysMenuServiceImpl.java index 20224a9d8..cbdf9f4da 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysMenuServiceImpl.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysMenuServiceImpl.java @@ -16,6 +16,8 @@ import com.microservices.system.mapper.SysRoleMapper; import com.microservices.system.service.ISysMenuService; import com.microservices.system.service.ISysRoleMenuService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; import java.util.*; @@ -27,6 +29,7 @@ import java.util.stream.Collectors; * @author microservices */ @Service +@RefreshScope public class SysMenuServiceImpl implements ISysMenuService { public static final String PREMISSION_STRING = "perms[\"{0}\"]"; @@ -39,6 +42,8 @@ public class SysMenuServiceImpl implements ISysMenuService @Autowired private ISysRoleMenuService roleMenuService; + @Value("${system.hidePerms:}") + private String hidePerms; /** * 根据用户查询系统菜单列表 @@ -361,7 +366,13 @@ public class SysMenuServiceImpl implements ISysMenuService @Override public Set selectMenuPermsByRoleKey(String roleKey) { SysRole sysRole = roleMapper.selectRoleByKey(roleKey); - return selectMenuPermsByRoleId(sysRole.getRoleId()); + Set menuPerms = selectMenuPermsByRoleId(sysRole.getRoleId()); + // 隐藏部分菜单 + if (StringUtils.isNotEmpty(hidePerms)) { + List hidePermList = Arrays.asList(hidePerms.split(",")); + menuPerms = menuPerms.stream().filter(x -> !hidePermList.contains(x)).collect(Collectors.toSet()); + } + return menuPerms; } @Override @@ -371,9 +382,16 @@ public class SysMenuServiceImpl implements ISysMenuService if (userIdentify != null && userIdentify.getSysDept() != null) { sysMenu.setDeptType(userIdentify.getSysDept().getDeptType()); } - return menuMapper.selectMenuList(sysMenu); + List sysMenuList = menuMapper.selectMenuList(sysMenu); + // 隐藏部分菜单 + if (StringUtils.isNotEmpty(hidePerms)) { + List hidePermList = Arrays.asList(hidePerms.split(",")); + sysMenuList = sysMenuList.stream().filter(x -> !hidePermList.contains(x.getPerms())).collect(Collectors.toList()); + } + return sysMenuList; } + @Override public List selectMenuListByMenuIds(Long[] menuIds) { if (menuIds.length > 0) {