auth.ts 3.69 KB
import Cookies from 'js-cookie'

// Token相关常量
const TOKEN_KEY = 'token'
const REFRESH_TOKEN_KEY = 'refresh_token'
const USER_INFO_KEY = 'user_info'

// Token过期时间(7天)
const TOKEN_EXPIRES = 7

/**
 * 获取Token
 */
export function getToken(): string | undefined {
  return Cookies.get(TOKEN_KEY)
}

/**
 * 设置Token
 * @param token Token值
 */
export function setToken(token: string): void {
  Cookies.set(TOKEN_KEY, token, { expires: TOKEN_EXPIRES })
}

/**
 * 移除Token
 */
export function removeToken(): void {
  Cookies.remove(TOKEN_KEY)
  Cookies.remove(REFRESH_TOKEN_KEY)
  Cookies.remove(USER_INFO_KEY)
}

/**
 * 获取刷新Token
 */
export function getRefreshToken(): string | undefined {
  return Cookies.get(REFRESH_TOKEN_KEY)
}

/**
 * 设置刷新Token
 * @param refreshToken 刷新Token值
 */
export function setRefreshToken(refreshToken: string): void {
  Cookies.set(REFRESH_TOKEN_KEY, refreshToken, { expires: TOKEN_EXPIRES })
}

/**
 * 获取用户信息
 */
export function getUserInfo(): any {
  const userInfo = Cookies.get(USER_INFO_KEY)
  return userInfo ? JSON.parse(userInfo) : null
}

/**
 * 设置用户信息
 * @param userInfo 用户信息
 */
export function setUserInfo(userInfo: any): void {
  Cookies.set(USER_INFO_KEY, JSON.stringify(userInfo), { expires: TOKEN_EXPIRES })
}

/**
 * 检查是否有权限
 * @param permission 权限标识
 * @param userPermissions 用户权限列表
 */
export function hasPermission(permission: string, userPermissions: string[]): boolean {
  if (!permission) return true
  if (!userPermissions || userPermissions.length === 0) return false
  
  return userPermissions.includes(permission)
}

/**
 * 检查是否有角色
 * @param role 角色标识
 * @param userRoles 用户角色列表
 */
export function hasRole(role: string, userRoles: string[]): boolean {
  if (!role) return true
  if (!userRoles || userRoles.length === 0) return false
  
  return userRoles.includes(role)
}

/**
 * 检查是否有任意一个权限
 * @param permissions 权限列表
 * @param userPermissions 用户权限列表
 */
export function hasAnyPermission(permissions: string[], userPermissions: string[]): boolean {
  if (!permissions || permissions.length === 0) return true
  if (!userPermissions || userPermissions.length === 0) return false
  
  return permissions.some(permission => userPermissions.includes(permission))
}

/**
 * 检查是否有所有权限
 * @param permissions 权限列表
 * @param userPermissions 用户权限列表
 */
export function hasAllPermissions(permissions: string[], userPermissions: string[]): boolean {
  if (!permissions || permissions.length === 0) return true
  if (!userPermissions || userPermissions.length === 0) return false
  
  return permissions.every(permission => userPermissions.includes(permission))
}

/**
 * 检查Token是否过期
 * @param token Token值
 */
export function isTokenExpired(token: string): boolean {
  if (!token) return true
  
  try {
    // 解析JWT Token
    const payload = JSON.parse(atob(token.split('.')[1]))
    const currentTime = Math.floor(Date.now() / 1000)
    
    return payload.exp < currentTime
  } catch (error) {
    return true
  }
}

/**
 * 获取Token过期时间
 * @param token Token值
 */
export function getTokenExpiration(token: string): Date | null {
  if (!token) return null
  
  try {
    const payload = JSON.parse(atob(token.split('.')[1]))
    return new Date(payload.exp * 1000)
  } catch (error) {
    return null
  }
}

/**
 * 清除所有认证信息
 */
export function clearAuth(): void {
  removeToken()
  // 清除localStorage中的其他认证相关数据
  localStorage.removeItem('permissions')
  localStorage.removeItem('roles')
  localStorage.removeItem('menuList')
}