fix 修复 解决通过loginId查询角色和菜单权限 而非当前用户时 报错问题

This commit is contained in:
疯狂的狮子Li 2025-05-26 15:59:04 +08:00
parent 4e3fc7002d
commit a7ea096319
3 changed files with 52 additions and 10 deletions

View File

@ -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);
}

View File

@ -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.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
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.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());
} }
} }

View File

@ -1,11 +1,12 @@
package org.dromara.system.service.impl; package org.dromara.system.service.impl;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.service.PermissionService;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.service.ISysMenuService; import org.dromara.system.service.ISysMenuService;
import org.dromara.system.service.ISysPermissionService; import org.dromara.system.service.ISysPermissionService;
import org.dromara.system.service.ISysRoleService; import org.dromara.system.service.ISysRoleService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashSet; import java.util.HashSet;
@ -18,7 +19,7 @@ import java.util.Set;
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class SysPermissionServiceImpl implements ISysPermissionService { public class SysPermissionServiceImpl implements ISysPermissionService, PermissionService {
private final ISysRoleService roleService; private final ISysRoleService roleService;
private final ISysMenuService menuService; private final ISysMenuService menuService;