Files
nanxiisletJava/src/main/java/com/nanxiislet/admin/config/StpInterfaceImpl.java
2026-01-27 20:48:47 +08:00

88 lines
2.3 KiB
Java

package com.nanxiislet.admin.config;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpUtil;
import com.nanxiislet.admin.entity.SysMenu;
import com.nanxiislet.admin.entity.SysUser;
import com.nanxiislet.admin.service.AuthService;
import com.nanxiislet.admin.service.SysMenuService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* Sa-Token 权限认证接口实现
* 用于获取当前用户的角色和权限列表
*
* @author NanxiIslet
* @since 2024-01-08
*/
@Component
public class StpInterfaceImpl implements StpInterface {
@Resource
private AuthService authService;
@Resource
private SysMenuService menuService;
/**
* 获取用户权限列表
*/
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
// 获取用户信息
Long userId = Long.parseLong(loginId.toString());
SysUser user = authService.getById(userId);
if (user == null) {
return new ArrayList<>();
}
String roleCode = user.getRole();
// 超级管理员拥有所有权限
if ("super_admin".equals(roleCode)) {
return List.of("*");
}
// 根据角色获取菜单权限
List<SysMenu> menus = menuService.getMenusByRoleCode(roleCode);
if (menus == null || menus.isEmpty()) {
return new ArrayList<>();
}
return menus.stream()
.map(SysMenu::getCode)
.distinct()
.toList();
}
/**
* 获取用户角色列表
*/
@Override
public List<String> getRoleList(Object loginId, String loginType) {
Long userId = Long.parseLong(loginId.toString());
SysUser user = authService.getById(userId);
if (user == null) {
return new ArrayList<>();
}
List<String> roles = new ArrayList<>();
String roleCode = user.getRole();
if (roleCode != null && !roleCode.isEmpty()) {
roles.add(roleCode);
// 超级管理员同时拥有 admin 角色
if ("super_admin".equals(roleCode)) {
roles.add("admin");
}
}
return roles;
}
}