From 55502df53275318e886504eecdcc3e87fcba35cb Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Thu, 25 Jan 2024 16:56:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=A0=A1=E9=AA=8C=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=94=A8=E6=88=B7=E6=98=AF=E5=90=A6=E6=9C=89=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=9D=83=E9=99=90=E6=96=B9=E6=B3=95=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/service/PermissionService.java | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/youlai/system/security/service/PermissionService.java b/src/main/java/com/youlai/system/security/service/PermissionService.java index c4dbe68f..db627e75 100644 --- a/src/main/java/com/youlai/system/security/service/PermissionService.java +++ b/src/main/java/com/youlai/system/security/service/PermissionService.java @@ -26,11 +26,10 @@ import java.util.*; @Slf4j public class PermissionService { - private final RedisTemplate redisTemplate; + private final RedisTemplate redisTemplate; private final SysRoleMenuService roleMenuService; - /** * 初始化权限缓存 */ @@ -78,7 +77,7 @@ public class PermissionService { /** * 刷新权限缓存 (角色编码变更时调用) */ - public void refreshRolePermsCache(String oldRoleCode,String newRoleCode) { + public void refreshRolePermsCache(String oldRoleCode, String newRoleCode) { // 清理旧角色权限缓存 redisTemplate.opsForHash().delete(CacheConstants.ROLE_PERMS_PREFIX, oldRoleCode); @@ -128,8 +127,8 @@ public class PermissionService { /** * 判断当前登录用户是否拥有操作权限 * - * @param requiredPerm 权限标识(eg: sys:user:add) - * @return + * @param requiredPerm 所需权限 + * @return 是否有权限 */ public boolean hasPerm(String requiredPerm) { @@ -141,29 +140,24 @@ public class PermissionService { return true; } + // 获取当前登录用户的角色编码集合 Set roleCodes = SecurityUtils.getRoles(); if (CollectionUtil.isEmpty(roleCodes)) { return false; } - boolean hasPermission = false; - for (String roleCode : roleCodes) { - Set rolePerms = (Set) redisTemplate.opsForHash().get(CacheConstants.ROLE_PERMS_PREFIX, roleCode); - if (CollectionUtil.isEmpty(rolePerms)) { - // 无权限 ,判断下一个角色是否有权限 - continue; - } - // 匹配权限,支持通配符 - hasPermission = rolePerms.stream() - .anyMatch(rolePerm -> - PatternMatchUtils.simpleMatch(rolePerm, requiredPerm) - ); - - if (hasPermission) { - // 匹配到权限,退出循环 - break; - } + // 获取当前登录用户的所有角色的权限列表 + Set rolePerms = this.getRolePermsFormCache(roleCodes); + if (CollectionUtil.isEmpty(rolePerms)) { + return false; } + // 判断当前登录用户的所有角色的权限列表中是否包含所需权限 + boolean hasPermission = rolePerms.stream() + .anyMatch(rolePerm -> + // 匹配权限,支持通配符(* 等) + PatternMatchUtils.simpleMatch(rolePerm, requiredPerm) + ); + if (!hasPermission) { log.error("用户无操作权限"); }