package com.jxy.common.security.auth;

import com.jxy.common.security.annotation.RequiresPermissions;
import com.jxy.common.security.annotation.RequiresRoles;
import com.jxy.system.api.model.LoginUser;

/**
 * @Description 权限验证工具类
 * @Date 2022/5/13 16:17
 * @Author 杜懿
 */
public class AuthUtil {

    /**
     * 底层的AuthLogic对象
     */
    public static AuthLogic authLogic = new AuthLogic();

    /**
     * 检查当前用户是否登陆
     */
    public static void checkLogin(){
        authLogic.checkLogin();
    }

    /**
     * 获取当前登陆用户信息
     * @param token
     * @return
     */
    public static LoginUser getLoginUser(String token){return authLogic.getLoginUser(token);}

    /**
     * 验证当前用户有效期
     * @param loginUser
     */
    public static void verifyLoginUserExpire(LoginUser loginUser){
        authLogic.verifyLoginUserExpire(loginUser);
    }

    /**
     *判断当前用户是否有指定的角色标识
     * @param role 角色标识
     * @return 返回布尔值
     */
    public static boolean hasRole(String role){return authLogic.hasRole(role);}

    /**
     *当前账号是否含有指定角色标识,如果验证未通过，则抛出异常: NotRoleException
     * @param role
     */
    public static void checkRole(String role){authLogic.checkRole(role);}

    /**
     * 根据注解传入参数鉴权, 如果验证未通过，则抛出异常: NotRoleException
     *
     * @param requiresRoles 角色权限注解
     */
    public static void checkRole(RequiresRoles requiresRoles)
    {
        authLogic.checkRole(requiresRoles);
    }

    /**
     * 当前账号是否含有指定角色标识 [指定多个，必须全部验证通过]
     *
     * @param roles 角色标识数组
     */
    public static void checkRoleAnd(String... roles)
    {
        authLogic.checkRoleAnd(roles);
    }

    /**
     * 当前账号是否含有指定角色标识 [指定多个，只要其一验证通过即可]
     *
     * @param roles 角色标识数组
     */
    public static void checkRoleOr(String... roles)
    {
        authLogic.checkRoleOr(roles);
    }


    /**
     * 判断当前账号是否含有指定权限
     *
     * @param permission 权限码
     * @return 是否含有指定权限
     */
    public static boolean hasPermission(String permission)
    {
        return authLogic.hasPermission(permission);
    }

    /**
     * 当前账号是否含有指定权限, 如果验证未通过，则抛出异常: NotPermissionException
     *
     * @param permission 权限码
     */
    public static void checkPermission(String permission)
    {
        authLogic.checkPermission(permission);
    }

    /**
     * 根据注解传入参数鉴权, 如果验证未通过，则抛出异常: NotPermissionException
     *
     * @param requiresPermissions 权限注解
     */
    public static void checkPermission(RequiresPermissions requiresPermissions)
    {
        authLogic. checkPermission(requiresPermissions);
    }

    /**
     * 当前账号是否含有指定权限 [指定多个，必须全部验证通过]
     *
     * @param permissions 权限码数组
     */
    public static void checkPermissionAnd(String... permissions)
    {
        authLogic.checkPermissionAnd(permissions);
    }

    /**
     * 当前账号是否含有指定权限 [指定多个，只要其一验证通过即可]
     *
     * @param permissions 权限码数组
     */
    public static void checkPermissionOr(String... permissions)
    {
        authLogic.checkPermissionOr(permissions);
    }



    /**
     * 会话注销
     */
    public static void logout(){authLogic.logout();}

    /**
     * 根据token注销会话
     * @param token
     */
    public static void logoutByToken(String token){authLogic.logoutByToken(token);}

}
