From 36f5c30c929e1c2fca2147f867ead2ad57abb0fe Mon Sep 17 00:00:00 2001 From: Binary Date: Mon, 26 May 2025 14:19:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20sa-token=20=E6=9F=A5=E8=AF=A2=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=97=B6=20=E8=BF=94=E5=9B=9E=E5=BD=93=E5=89=8D=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E4=BA=BA=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在通用角色服务 RoleService 接口中添加 selectRoleKeysByUserId 方法,用于查询用户角色权限 - 完善 SaPermissionImpl 类中的 getRoleList 方法的查询逻辑 - 在 SysRoleServiceImpl 类中实现 selectRoleKeysByUserId 方法,返回用户角色权限映射 --- .../common/core/service/RoleService.java | 10 +++++++- .../core/service/SaPermissionImpl.java | 23 +++++++++++++++++++ .../service/impl/SysRoleServiceImpl.java | 13 +++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) 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..11b687fa4 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 @@ -1,10 +1,18 @@ package org.dromara.common.core.service; +import java.util.Map; + /** * 通用 角色服务 * * @author AprilWind */ public interface RoleService { - + /** + * 根据用户ID查询角色权限 + * + * @param userId 用户ID + * @return 角色权限 roleKey:roleName + */ + Map selectRoleKeysByUserId(Long userId); } diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java index 1cef9a773..b88d9e569 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java @@ -3,10 +3,14 @@ package org.dromara.common.satoken.core.service; import cn.dev33.satoken.stp.StpInterface; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.enums.UserType; +import org.dromara.common.core.service.RoleService; +import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.satoken.utils.LoginHelper; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Set; /** * sa-token 权限管理实现类 @@ -36,6 +40,25 @@ public class SaPermissionImpl implements StpInterface { @Override public List getRoleList(Object loginId, String loginType) { LoginUser loginUser = LoginHelper.getLoginUser(); + + if (loginId != null) { + // 查询指定用户权限 + if (loginId instanceof Long) { + Long selectUserId = (Long) loginId; + Long userId = null; + if (loginUser != null) { + userId = loginUser.getUserId(); + } + if (!selectUserId.equals(userId)) { + // 查询的不是当前登录用户 那么查询数据库指定用户的权限 + RoleService roleService = SpringUtils.getBean("sysRoleServiceImpl"); + Map roleKeysByUserId = roleService.selectRoleKeysByUserId(selectUserId); + Set roleKeySet = roleKeysByUserId.keySet(); + return new ArrayList<>(roleKeySet); + } // else 查询的是当前登录用户 走原来的逻辑 + } + } + UserType userType = UserType.getUserType(loginUser.getUserType()); if (userType == UserType.SYS_USER) { return new ArrayList<>(loginUser.getRolePermission()); 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..faab8e1e4 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 @@ -40,6 +40,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; /** * 角色 业务层处理 @@ -97,6 +98,18 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { return baseMapper.selectRolesByUserId(userId); } + /** + * 根据用户ID查询角色权限 + * + * @param userId 用户ID + * @return 角色权限 roleKey:roleName + */ + @Override + public Map selectRoleKeysByUserId(Long userId) { + List sysRoleVos = baseMapper.selectRolesByUserId(userId); + return sysRoleVos.stream().collect(Collectors.toMap(SysRoleVo::getRoleKey, SysRoleVo::getRoleName)); + } + /** * 根据用户ID查询角色列表(包含被授权状态) *