mirror of
https://gitee.com/dromara/RuoYi-Cloud-Plus.git
synced 2025-09-28 06:31:51 +00:00
fix 修复 解决通过loginId查询角色和菜单权限 而非当前用户时 报错问题 支持跨服务查询权限信息通过satoken的api
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
package org.dromara.system.api;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户权限处理
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
public interface RemotePermissionService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取角色数据权限
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @return 角色权限信息
|
||||||
|
*/
|
||||||
|
Set<String> getRolePermission(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单数据权限
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @return 菜单权限信息
|
||||||
|
*/
|
||||||
|
Set<String> getMenuPermission(Long userId);
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,28 @@
|
|||||||
|
package org.dromara.common.core.service;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户权限处理
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
public interface PermissionService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取角色数据权限
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @return 角色权限信息
|
||||||
|
*/
|
||||||
|
Set<String> getRolePermission(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单数据权限
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @return 菜单权限信息
|
||||||
|
*/
|
||||||
|
Set<String> getMenuPermission(Long userId);
|
||||||
|
|
||||||
|
}
|
@@ -1,9 +1,13 @@
|
|||||||
package org.dromara.common.satoken.core.service;
|
package org.dromara.common.satoken.core.service;
|
||||||
|
|
||||||
import cn.dev33.satoken.stp.StpInterface;
|
import cn.dev33.satoken.stp.StpInterface;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import org.dromara.common.core.enums.UserType;
|
import org.dromara.common.core.enums.UserType;
|
||||||
|
import org.dromara.common.core.service.PermissionService;
|
||||||
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.system.api.model.LoginUser;
|
import org.dromara.system.api.model.LoginUser;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -15,19 +19,25 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class SaPermissionImpl implements StpInterface {
|
public class SaPermissionImpl implements StpInterface {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PermissionService permissionService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取菜单权限列表
|
* 获取菜单权限列表
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<String> getPermissionList(Object loginId, String loginType) {
|
public List<String> getPermissionList(Object loginId, String loginType) {
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
if (ObjectUtil.isNull(loginUser)) {
|
||||||
|
List<String> list = StringUtils.splitList(loginId.toString(), ":");
|
||||||
|
return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(list.get(1))));
|
||||||
|
}
|
||||||
UserType userType = UserType.getUserType(loginUser.getUserType());
|
UserType userType = UserType.getUserType(loginUser.getUserType());
|
||||||
if (userType == UserType.SYS_USER) {
|
if (userType == UserType.APP_USER) {
|
||||||
return new ArrayList<>(loginUser.getMenuPermission());
|
|
||||||
} else if (userType == UserType.APP_USER) {
|
|
||||||
// 其他端 自行根据业务编写
|
// 其他端 自行根据业务编写
|
||||||
}
|
}
|
||||||
return new ArrayList<>();
|
// SYS_USER 默认返回权限
|
||||||
|
return new ArrayList<>(loginUser.getMenuPermission());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,12 +46,15 @@ public class SaPermissionImpl implements StpInterface {
|
|||||||
@Override
|
@Override
|
||||||
public List<String> getRoleList(Object loginId, String loginType) {
|
public List<String> getRoleList(Object loginId, String loginType) {
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
if (ObjectUtil.isNull(loginUser)) {
|
||||||
|
List<String> list = StringUtils.splitList(loginId.toString(), ":");
|
||||||
|
return new ArrayList<>(permissionService.getRolePermission(Long.parseLong(list.get(1))));
|
||||||
|
}
|
||||||
UserType userType = UserType.getUserType(loginUser.getUserType());
|
UserType userType = UserType.getUserType(loginUser.getUserType());
|
||||||
if (userType == UserType.SYS_USER) {
|
if (userType == UserType.APP_USER) {
|
||||||
return new ArrayList<>(loginUser.getRolePermission());
|
|
||||||
} else if (userType == UserType.APP_USER) {
|
|
||||||
// 其他端 自行根据业务编写
|
// 其他端 自行根据业务编写
|
||||||
}
|
}
|
||||||
return new ArrayList<>();
|
// SYS_USER 默认返回权限
|
||||||
|
return new ArrayList<>(loginUser.getRolePermission());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,31 @@
|
|||||||
|
package org.dromara.common.core.service.impl;
|
||||||
|
|
||||||
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.dromara.common.core.service.PermissionService;
|
||||||
|
import org.dromara.system.api.RemotePermissionService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 权限服务
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class PermissionServiceImpl implements PermissionService {
|
||||||
|
|
||||||
|
@DubboReference
|
||||||
|
private RemotePermissionService remotePermissionService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getRolePermission(Long userId) {
|
||||||
|
return remotePermissionService.getRolePermission(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getMenuPermission(Long userId) {
|
||||||
|
return remotePermissionService.getMenuPermission(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -1 +1,2 @@
|
|||||||
org.dromara.common.core.service.impl.DictServiceImpl
|
org.dromara.common.core.service.impl.DictServiceImpl
|
||||||
|
org.dromara.common.core.service.impl.PermissionServiceImpl
|
||||||
|
@@ -0,0 +1,32 @@
|
|||||||
|
package org.dromara.system.dubbo;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.apache.dubbo.config.annotation.DubboService;
|
||||||
|
import org.dromara.common.core.service.PermissionService;
|
||||||
|
import org.dromara.system.service.ISysPermissionService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 权限服务
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
@DubboService
|
||||||
|
public class RemotePermissionServiceImpl implements PermissionService {
|
||||||
|
|
||||||
|
private final ISysPermissionService permissionService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getRolePermission(Long userId) {
|
||||||
|
return permissionService.getRolePermission(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getMenuPermission(Long userId) {
|
||||||
|
return permissionService.getMenuPermission(userId);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user