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查询角色列表(包含被授权状态) *