auth.ts
3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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')
}