mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-09-30 08:16:37 +08:00
6f6fececa8
- 使用HeroUI Checkbox组件替换原生checkbox - 重构隧道列表为card-based tile风格 - 添加选中/未选中/已分配状态视觉区分 - 应用eslint --fix代码格式统一 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
80 lines
1.5 KiB
TypeScript
80 lines
1.5 KiB
TypeScript
import { getRoleIdFromToken, isTokenValid } from "./jwt";
|
|
|
|
/**
|
|
* 权限工具类
|
|
*/
|
|
|
|
/**
|
|
* 获取当前用户的token
|
|
* @returns token
|
|
*/
|
|
export function getToken(): string | null {
|
|
return localStorage.getItem("token");
|
|
}
|
|
|
|
/**
|
|
* 获取当前用户的角色ID
|
|
* @returns 角色ID
|
|
*/
|
|
export function getCurrentUserRoleId(): number | null {
|
|
const token = getToken();
|
|
|
|
if (!token || !isTokenValid(token)) {
|
|
return null;
|
|
}
|
|
|
|
return getRoleIdFromToken(token);
|
|
}
|
|
|
|
/**
|
|
* 判断当前用户是否是管理员
|
|
* @returns 是否是管理员
|
|
*/
|
|
export function isAdmin(): boolean {
|
|
const roleId = getCurrentUserRoleId();
|
|
|
|
return roleId === 0;
|
|
}
|
|
|
|
/**
|
|
* 判断当前用户是否有指定角色
|
|
* @param targetRoleId 目标角色ID
|
|
* @returns 是否有指定角色
|
|
*/
|
|
export function hasRole(targetRoleId: number): boolean {
|
|
const roleId = getCurrentUserRoleId();
|
|
|
|
return roleId === targetRoleId;
|
|
}
|
|
|
|
/**
|
|
* 判断当前用户是否已登录且token有效
|
|
* @returns 是否已登录
|
|
*/
|
|
export function isLoggedIn(): boolean {
|
|
const token = getToken();
|
|
|
|
return token ? isTokenValid(token) : false;
|
|
}
|
|
|
|
/**
|
|
* 权限检查装饰器函数
|
|
* @param fn 要执行的函数
|
|
* @param errorMsg 权限不足时的错误提示
|
|
* @returns 包装后的函数
|
|
*/
|
|
export function requireAdmin<T extends (...args: any[]) => any>(
|
|
fn: T,
|
|
errorMsg: string = "权限不足,仅管理员可操作",
|
|
): T {
|
|
return ((...args: Parameters<T>) => {
|
|
if (!isAdmin()) {
|
|
console.warn(errorMsg);
|
|
|
|
return false;
|
|
}
|
|
|
|
return fn(...args);
|
|
}) as T;
|
|
}
|