hjl
2024-05-24 2a1e2ebb3ce800fc6aa8067db0cc3b0ab9253604
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
@@ -1,11 +1,5 @@
package com.ruoyi.common.security.auth;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import com.ruoyi.system.api.model.LoginUserParent;
import org.springframework.util.PatternMatchUtils;
import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.common.core.exception.auth.NotLoginException;
import com.ruoyi.common.core.exception.auth.NotPermissionException;
@@ -19,18 +13,27 @@
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.system.api.model.LoginUserParent;
import org.springframework.util.PatternMatchUtils;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
 * Token 权限验证,逻辑实现类
 * 
 * @author ruoyi
 */
public class AuthLogic
{
    /** 所有权限标识 */
public class AuthLogic {
    /**
     * 所有权限标识
     */
    private static final String ALL_PERMISSION = "*:*:*";
    /** 管理员角色权限标识 */
    /**
     * 管理员角色权限标识
     */
    private static final String SUPER_ADMIN = "admin";
    public TokenService tokenService = SpringUtils.getBean(TokenService.class);
@@ -38,11 +41,9 @@
    /**
     * 会话注销
     */
    public void logout()
    {
    public void logout() {
        String token = SecurityUtils.getToken();
        if (token == null)
        {
        if (token == null) {
            return;
        }
        logoutByToken(token);
@@ -51,23 +52,21 @@
    /**
     * 会话注销,根据指定Token
     */
    public void logoutByToken(String token)
    {
    public void logoutByToken(String token) {
        tokenService.delLoginUser(token);
    }
    /**
     * 家长端会话注销,根据指定Token
     */
    public void logoutByToken1(String token)
    {
    public void logoutByToken1(String token) {
        tokenService.delLoginUser1(token);
    }
    /**
     * 检验用户是否已经登录,如未登录,则抛出异常
     */
    public void checkLogin()
    {
    public void checkLogin() {
        getLoginUser();
    }
@@ -76,16 +75,13 @@
     * 
     * @return 用户缓存信息
     */
    public LoginUser getLoginUser()
    {
    public LoginUser getLoginUser() {
        String token = SecurityUtils.getToken();
        if (token == null)
        {
        if (token == null) {
            throw new NotLoginException("未提供token");
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        if (loginUser == null)
        {
        if (loginUser == null) {
            throw new NotLoginException("无效的token");
        }
        return loginUser;
@@ -97,19 +93,29 @@
     * @param token 前端传递的认证信息
     * @return 用户缓存信息
     */
    public LoginUser getLoginUser(String token)
    {
    public LoginUser getLoginUser(String token) {
        return tokenService.getLoginUser(token);
    }
    /**
     * 获取当前用户缓存信息, 如果未登录,则抛出异常
     *
     * @param token 前端传递的认证信息
     * @return 用户缓存信息
     */
    public LoginUserParent getLoginUser1(String token)
    {
    public LoginUserParent getLoginUser1(String token) {
        return tokenService.getLoginUser1(token);
    }
    /**
     * 获取当前用户缓存信息, 如果未登录,则抛出异常
     * 学习端
     *
     * @param token 前端传递的认证信息
     * @return 用户缓存信息
     */
    public LoginUserParent getLoginUserStudy(String token) {
        return tokenService.getLoginUserStudy(token);
    }
    /**
@@ -117,18 +123,26 @@
     * 
     * @param loginUser 当前用户信息
     */
    public void verifyLoginUserExpire(LoginUser loginUser)
    {
    public void verifyLoginUserExpire(LoginUser loginUser) {
        tokenService.verifyToken(loginUser);
    }
    /**
     * 验证当前用户有效期, 如果相差不足120分钟,自动刷新缓存
     *
     * @param loginUser 当前用户信息
     */
    public void verifyLoginUserExpire1(LoginUserParent loginUser)
    {
    public void verifyLoginUserExpire1(LoginUserParent loginUser) {
        tokenService.verifyToken1(loginUser);
    }
    /**
     * 验证当前用户有效期, 如果相差不足120分钟,自动刷新缓存
     *
     * @param loginUser 当前用户信息
     */
    public void verifyLoginUserStudyExpire(LoginUserParent loginUser) {
        tokenService.verifyTokenStudy(loginUser);
    }
    /**
@@ -137,8 +151,7 @@
     * @param permission 权限字符串
     * @return 用户是否具备某权限
     */
    public boolean hasPermi(String permission)
    {
    public boolean hasPermi(String permission) {
        return hasPermi(getPermiList(), permission);
    }
@@ -148,10 +161,8 @@
     * @param permission 权限字符串
     * @return 用户是否具备某权限
     */
    public void checkPermi(String permission)
    {
        if (!hasPermi(getPermiList(), permission))
        {
    public void checkPermi(String permission) {
        if (!hasPermi(getPermiList(), permission)) {
            throw new NotPermissionException(permission);
        }
    }
@@ -161,15 +172,11 @@
     * 
     * @param requiresPermissions 注解对象
     */
    public void checkPermi(RequiresPermissions requiresPermissions)
    {
    public void checkPermi(RequiresPermissions requiresPermissions) {
        SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ","));
        if (requiresPermissions.logical() == Logical.AND)
        {
        if (requiresPermissions.logical() == Logical.AND) {
            checkPermiAnd(requiresPermissions.value());
        }
        else
        {
        } else {
            checkPermiOr(requiresPermissions.value());
        }
    }
@@ -179,13 +186,10 @@
     *
     * @param permissions 权限列表
     */
    public void checkPermiAnd(String... permissions)
    {
    public void checkPermiAnd(String... permissions) {
        Set<String> permissionList = getPermiList();
        for (String permission : permissions)
        {
            if (!hasPermi(permissionList, permission))
            {
        for (String permission : permissions) {
            if (!hasPermi(permissionList, permission)) {
                throw new NotPermissionException(permission);
            }
        }
@@ -196,18 +200,14 @@
     * 
     * @param permissions 权限码数组
     */
    public void checkPermiOr(String... permissions)
    {
    public void checkPermiOr(String... permissions) {
        Set<String> permissionList = getPermiList();
        for (String permission : permissions)
        {
            if (hasPermi(permissionList, permission))
            {
        for (String permission : permissions) {
            if (hasPermi(permissionList, permission)) {
                return;
            }
        }
        if (permissions.length > 0)
        {
        if (permissions.length > 0) {
            throw new NotPermissionException(permissions);
        }
    }
@@ -218,8 +218,7 @@
     * @param role 角色标识
     * @return 用户是否具备某角色
     */
    public boolean hasRole(String role)
    {
    public boolean hasRole(String role) {
        return hasRole(getRoleList(), role);
    }
@@ -228,10 +227,8 @@
     * 
     * @param role 角色标识
     */
    public void checkRole(String role)
    {
        if (!hasRole(role))
        {
    public void checkRole(String role) {
        if (!hasRole(role)) {
            throw new NotRoleException(role);
        }
    }
@@ -241,14 +238,10 @@
     * 
     * @param requiresRoles 注解对象
     */
    public void checkRole(RequiresRoles requiresRoles)
    {
        if (requiresRoles.logical() == Logical.AND)
        {
    public void checkRole(RequiresRoles requiresRoles) {
        if (requiresRoles.logical() == Logical.AND) {
            checkRoleAnd(requiresRoles.value());
        }
        else
        {
        } else {
            checkRoleOr(requiresRoles.value());
        }
    }
@@ -258,13 +251,10 @@
     * 
     * @param roles 角色标识数组
     */
    public void checkRoleAnd(String... roles)
    {
    public void checkRoleAnd(String... roles) {
        Set<String> roleList = getRoleList();
        for (String role : roles)
        {
            if (!hasRole(roleList, role))
            {
        for (String role : roles) {
            if (!hasRole(roleList, role)) {
                throw new NotRoleException(role);
            }
        }
@@ -275,18 +265,14 @@
     * 
     * @param roles 角色标识数组
     */
    public void checkRoleOr(String... roles)
    {
    public void checkRoleOr(String... roles) {
        Set<String> roleList = getRoleList();
        for (String role : roles)
        {
            if (hasRole(roleList, role))
            {
        for (String role : roles) {
            if (hasRole(roleList, role)) {
                return;
            }
        }
        if (roles.length > 0)
        {
        if (roles.length > 0) {
            throw new NotRoleException(roles);
        }
    }
@@ -296,8 +282,7 @@
     * 
     * @param at 注解对象
     */
    public void checkByAnnotation(RequiresLogin at)
    {
    public void checkByAnnotation(RequiresLogin at) {
        this.checkLogin();
    }
@@ -306,15 +291,11 @@
     * 
     * @param at 注解对象
     */
    public void checkByAnnotation(RequiresRoles at)
    {
    public void checkByAnnotation(RequiresRoles at) {
        String[] roleArray = at.value();
        if (at.logical() == Logical.AND)
        {
        if (at.logical() == Logical.AND) {
            this.checkRoleAnd(roleArray);
        }
        else
        {
        } else {
            this.checkRoleOr(roleArray);
        }
    }
@@ -324,15 +305,11 @@
     * 
     * @param at 注解对象
     */
    public void checkByAnnotation(RequiresPermissions at)
    {
    public void checkByAnnotation(RequiresPermissions at) {
        String[] permissionArray = at.value();
        if (at.logical() == Logical.AND)
        {
        if (at.logical() == Logical.AND) {
            this.checkPermiAnd(permissionArray);
        }
        else
        {
        } else {
            this.checkPermiOr(permissionArray);
        }
    }
@@ -342,15 +319,11 @@
     * 
     * @return 角色列表
     */
    public Set<String> getRoleList()
    {
        try
        {
    public Set<String> getRoleList() {
        try {
            LoginUser loginUser = getLoginUser();
            return loginUser.getRoles();
        }
        catch (Exception e)
        {
        } catch (Exception e) {
            return new HashSet<>();
        }
    }
@@ -360,15 +333,11 @@
     * 
     * @return 权限列表
     */
    public Set<String> getPermiList()
    {
        try
        {
    public Set<String> getPermiList() {
        try {
            LoginUser loginUser = getLoginUser();
            return loginUser.getPermissions();
        }
        catch (Exception e)
        {
        } catch (Exception e) {
            return new HashSet<>();
        }
    }
@@ -380,8 +349,7 @@
     * @param permission 权限字符串
     * @return 用户是否具备某权限
     */
    public boolean hasPermi(Collection<String> authorities, String permission)
    {
    public boolean hasPermi(Collection<String> authorities, String permission) {
        return authorities.stream().filter(StringUtils::hasText)
                .anyMatch(x -> ALL_PERMISSION.contains(x) || PatternMatchUtils.simpleMatch(x, permission));
    }
@@ -393,8 +361,7 @@
     * @param role 角色
     * @return 用户是否具备某角色权限
     */
    public boolean hasRole(Collection<String> roles, String role)
    {
    public boolean hasRole(Collection<String> roles, String role) {
        return roles.stream().filter(StringUtils::hasText)
                .anyMatch(x -> SUPER_ADMIN.contains(x) || PatternMatchUtils.simpleMatch(x, role));
    }