package com.yf.exam.modules.user; // 导入自定义的 API 错误信息类 import com.yf.exam.core.api.ApiError; // 导入自定义的服务异常类 import com.yf.exam.core.exception.ServiceException; // 导入系统用户登录信息响应数据传输对象 import com.yf.exam.modules.sys.user.dto.response.SysUserLoginDTO; // 导入 Shiro 安全工具类 import org.apache.shiro.SecurityUtils; /** * 用户静态工具类,提供获取当前登录用户信息的静态方法。 * @author bool */ public class UserUtils { /** * 获取当前登录用户的ID。 * * @param throwable 一个布尔值,指示在获取用户 ID 失败时是否抛出异常。 * 若为 true,则在失败时抛出 ServiceException 异常; * 若为 false,则在失败时返回 null。 * @return 当前登录用户的 ID,如果获取失败且 throwable 为 false,则返回 null。 */ public static String getUserId(boolean throwable){ try { // 从 Shiro 的 Subject 中获取当前用户的主身份信息,并转换为 SysUserLoginDTO 对象,然后获取用户 ID return ((SysUserLoginDTO) SecurityUtils.getSubject().getPrincipal()).getId(); }catch (Exception e){ if(throwable){ // 若 throwable 为 true,获取用户 ID 失败时抛出服务异常 throw new ServiceException(ApiError.ERROR_10010002); } // 若 throwable 为 false,获取用户 ID 失败时返回 null return null; } } /** * 判断当前登录用户是否为管理员。 * * @param throwable 一个布尔值,指示在获取用户信息失败时是否抛出异常。 * 若为 true,则在失败时抛出 ServiceException 异常; * 若为 false,则在失败时返回 false。 * @return 若当前登录用户的角色列表包含 "sa",则返回 true;否则返回 false。 * 若获取用户信息失败且 throwable 为 false,也返回 false。 */ public static boolean isAdmin(boolean throwable){ try { // 从 Shiro 的 Subject 中获取当前用户的主身份信息,并转换为 SysUserLoginDTO 对象 SysUserLoginDTO dto = ((SysUserLoginDTO) SecurityUtils.getSubject().getPrincipal()); // 判断用户的角色列表是否包含 "sa" return dto.getRoles().contains("sa"); }catch (Exception e){ if(throwable){ // 若 throwable 为 true,获取用户信息失败时抛出服务异常 throw new ServiceException(ApiError.ERROR_10010002); } } // 若获取用户信息失败且 throwable 为 false,返回 false return false; } /** * 获取当前登录用户的 ID,默认在获取失败时会抛出异常。 * 该方法调用了 getUserId(boolean throwable) 方法,并将 throwable 参数设置为 true。 * * @return 当前登录用户的 ID,如果获取失败则抛出 ServiceException 异常。 */ public static String getUserId(){ return getUserId(true); } }