From d5c2449921631ed67606c23f0e472bbab773150d Mon Sep 17 00:00:00 2001 From: 27797 <1q2w3e4r!@> Date: Thu, 24 Oct 2024 11:58:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0=E6=9D=83=E9=99=90=E6=97=B6=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=85=B7=E4=BD=93=E7=9A=84=E8=8F=9C=E5=8D=95=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E3=80=81=E8=A7=92=E8=89=B2=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 61d607e49b67e6b6e16f638becf35ff0f5bb0d57) (cherry picked from commit 152c424b0d286bdf2e713736e0c1cbb11d9adef0) --- .../common/core/constant/CacheNames.java | 8 +++ .../common/core/service/MenuService.java | 15 ++++++ .../common/core/service/RoleService.java | 8 ++- .../handler/SaTokenExceptionHandler.java | 13 +++-- .../dromara/system/mapper/SysMenuMapper.java | 1 + .../dromara/system/mapper/SysRoleMapper.java | 2 + .../service/impl/SysMenuServiceImpl.java | 25 +++++++-- .../service/impl/SysRoleServiceImpl.java | 15 ++++++ .../resources/mapper/system/SysMenuMapper.xml | 54 +++++++++++++++---- .../resources/mapper/system/SysRoleMapper.xml | 13 +++++ 10 files changed, 135 insertions(+), 19 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/MenuService.java diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java index c38f39b47..986407840 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java @@ -86,4 +86,12 @@ public interface CacheNames { */ String ONLINE_TOKEN = "online_tokens"; + /** + * 菜单 + */ + String SYS_MENU = "sys_menu#30d"; + /** + * 菜单 + */ + String SYS_ROLE = "sys_role#30d"; } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/MenuService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/MenuService.java new file mode 100644 index 000000000..b15ad5a21 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/MenuService.java @@ -0,0 +1,15 @@ +package org.dromara.common.core.service; + +/** + * 通用菜单接口 + */ +public interface MenuService { + /** + * 根据菜单ID查询菜单名称 + * + * @param menuId 用户ID + * @return 菜单名称 + */ + String selectMenuByPerms(String perms); +} + diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RoleService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RoleService.java index ba62c82ae..110c12403 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RoleService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/RoleService.java @@ -6,5 +6,11 @@ package org.dromara.common.core.service; * @author AprilWind */ public interface RoleService { - + /** + * 根据roleKey查询角色名称 + * + * @param roleKey roleKey + * @return 角色名称 + */ + String selectRoleByRoleKey(String roleKey); } diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java index a45af89d3..f32315469 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java @@ -7,6 +7,9 @@ import cn.hutool.http.HttpStatus; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; +import org.dromara.common.core.service.MenuService; +import org.dromara.common.core.service.RoleService; +import org.dromara.common.core.utils.SpringUtils; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -25,8 +28,9 @@ public class SaTokenExceptionHandler { @ExceptionHandler(NotPermissionException.class) public R handleNotPermissionException(NotPermissionException e, HttpServletRequest request) { String requestURI = request.getRequestURI(); - log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage()); - return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权"); + log.error("请求地址'{}',权限码校验失败'{}-{}-{}'", requestURI, e.getLoginType(), e.getPermission(), e.getMessage()); + final String n = SpringUtils.getBean(MenuService.class).selectMenuByPerms(e.getPermission()); + return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有【" + n + "】访问权限,请联系管理员授权"); } /** @@ -35,8 +39,9 @@ public class SaTokenExceptionHandler { @ExceptionHandler(NotRoleException.class) public R handleNotRoleException(NotRoleException e, HttpServletRequest request) { String requestURI = request.getRequestURI(); - log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage()); - return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权"); + log.error("请求地址'{}',角色权限校验失败'{}-{}-{}'", requestURI, e.getLoginType(), e.getRole(), e.getMessage()); + final String n = SpringUtils.getBean(RoleService.class).selectRoleByRoleKey(e.getRole()); + return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有【" + n + "】访问权限,请联系管理员授权"); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java index 205413b3f..263fc1d75 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java @@ -73,4 +73,5 @@ public interface SysMenuMapper extends BaseMapperPlus { */ List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + SysMenuVo selectVoByPerms(String perms); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysRoleMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysRoleMapper.java index 9cb1ea509..a254ae885 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysRoleMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysRoleMapper.java @@ -72,4 +72,6 @@ public interface SysRoleMapper extends BaseMapperPlus { */ List selectRolesByUserId(Long userId); + SysRoleVo selectByRoleKey(String roleKey); + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java index 40643e13d..821de2520 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java @@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.SystemConstants; +import org.dromara.common.core.constant.CacheNames; +import org.dromara.common.core.service.MenuService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; @@ -27,6 +29,7 @@ import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.mapper.SysRoleMenuMapper; import org.dromara.system.mapper.SysTenantPackageMapper; import org.dromara.system.service.ISysMenuService; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.*; @@ -38,7 +41,7 @@ import java.util.*; */ @RequiredArgsConstructor @Service -public class SysMenuServiceImpl implements ISysMenuService { +public class SysMenuServiceImpl implements ISysMenuService, MenuService { private final SysMenuMapper baseMapper; private final SysRoleMapper roleMapper; @@ -169,11 +172,15 @@ public class SysMenuServiceImpl implements ISysMenuService { if (tenantPackage.getMenuCheckStrictly()) { parentIds = baseMapper.selectObjs(new LambdaQueryWrapper() .select(SysMenu::getParentId) - .in(SysMenu::getMenuId, menuIds), x -> {return Convert.toLong(x);}); + .in(SysMenu::getMenuId, menuIds), x -> { + return Convert.toLong(x); + }); } return baseMapper.selectObjs(new LambdaQueryWrapper() .in(SysMenu::getMenuId, menuIds) - .notIn(CollUtil.isNotEmpty(parentIds), SysMenu::getMenuId, parentIds), x -> {return Convert.toLong(x);}); + .notIn(CollUtil.isNotEmpty(parentIds), SysMenu::getMenuId, parentIds), x -> { + return Convert.toLong(x); + }); } /** @@ -369,4 +376,16 @@ public class SysMenuServiceImpl implements ISysMenuService { } } + /** + * 根据菜单ID查询菜单信息 + * + * @param menuId 用户ID + * @return 菜单信息 + */ + @Cacheable(cacheNames = CacheNames.SYS_MENU, key = "#perms") + @Override + public String selectMenuByPerms(String perms) { + final SysMenuVo menuVo = baseMapper.selectVoByPerms(perms); + return menuVo.getMenuName(); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java index 0a2e485f6..c3c78d432 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java @@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.SystemConstants; +import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; @@ -36,6 +37,7 @@ import org.dromara.system.mapper.SysRoleMenuMapper; import org.dromara.system.mapper.SysUserRoleMapper; import org.dromara.system.service.ISysRoleService; import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -549,4 +551,17 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { }); } + + /** + * 根据roleKey查询角色名称 + * + * @param roleKey roleKey + * @return 角色名称 + */ + @Cacheable(cacheNames = CacheNames.SYS_ROLE, key = "#roleKey") + @Override + public String selectRoleByRoleKey(String roleKey) { + final SysRoleVo roleVo = baseMapper.selectByRoleKey(roleKey); + return roleVo.getRoleName(); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml index 9dd3f2e1d..0381a8636 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -1,19 +1,30 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - + + + diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 4ef7b1e22..373801122 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -56,4 +56,17 @@ WHERE r.del_flag = '0' and r.role_id = #{roleId} + +