package com.youlai.system.security.util; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.youlai.system.common.constant.SystemConstants; import com.youlai.system.security.model.SysUserDetails; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import java.util.Collection; import java.util.Collections; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; /** * Spring Security 工具类 * * @author Ray * @since 2021/1/10 */ public class SecurityUtils { /** * 获取当前登录人信息 * * @return Optional */ public static Optional getUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null) { Object principal = authentication.getPrincipal(); if (principal instanceof SysUserDetails) { return Optional.of((SysUserDetails) principal); } } return Optional.empty(); } /** * 获取用户ID * * @return Long */ public static Long getUserId() { return getUser().map(SysUserDetails::getUserId).orElse(null); } /** * 获取用户账号 * * @return String 用户账号 */ public static String getUsername() { return getUser().map(SysUserDetails::getUsername).orElse(null); } /** * 获取部门ID * * @return Long */ public static Long getDeptId() { return getUser().map(SysUserDetails::getDeptId).orElse(null); } /** * 获取数据权限范围 * * @return Integer */ public static Integer getDataScope() { return getUser().map(SysUserDetails::getDataScope).orElse(null); } /** * 获取用户角色集合 * * @return 角色集合 */ public static Set getRoles() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null) { Collection authorities = authentication.getAuthorities(); if (CollectionUtil.isNotEmpty(authorities)) { return authorities.stream().filter(item -> item.getAuthority().startsWith("ROLE_")) .map(item -> StrUtil.removePrefix(item.getAuthority(), "ROLE_")) .collect(Collectors.toSet()); } } return Collections.EMPTY_SET; } /** * 是否超级管理员 *

* 超级管理员忽视任何权限判断 */ public static boolean isRoot() { Set roles = getRoles(); return roles.contains(SystemConstants.ROOT_ROLE_CODE); } }