Files
live-hub-py/web/frontend/src/store/auth.ts
T
2026-06-22 13:11:15 +08:00

60 lines
1.3 KiB
TypeScript

import { authApi } from '../api/modules';
export interface AuthUser {
id: number;
username: string;
role: string;
role_label?: string;
permissions: string[];
}
const TOKEN_KEY = 'token';
const USER_KEY = 'user';
export function getToken(): string | null {
return localStorage.getItem(TOKEN_KEY);
}
export function getUser(): AuthUser | null {
const raw = localStorage.getItem(USER_KEY);
if (!raw) return null;
try {
return JSON.parse(raw);
} catch {
return null;
}
}
export function setAuth(token: string, user: AuthUser) {
localStorage.setItem(TOKEN_KEY, token);
localStorage.setItem(USER_KEY, JSON.stringify(user));
}
export function clearAuth() {
localStorage.removeItem(TOKEN_KEY);
localStorage.removeItem(USER_KEY);
}
export async function fetchCurrentUser(): Promise<AuthUser | null> {
const token = getToken();
if (!token) return null;
try {
const data = await authApi.me();
return {
id: data.id,
username: data.username,
role: data.role,
role_label: data.role_label,
permissions: data.permissions,
};
} catch {
clearAuth();
return null;
}
}
export function hasPerm(user: AuthUser | null, perm: string): boolean {
if (!user) return false;
return user.permissions.includes(perm);
}