Files
lingniu-vehicle-ingest/vehicle-data-platform/apps/web/src/v2/auth/session.ts
2026-07-16 06:19:02 +08:00

40 lines
1.1 KiB
TypeScript

const TOKEN_KEY = 'vehicle-platform.access-token';
export const PLATFORM_UNAUTHORIZED_EVENT = 'vehicle-platform:unauthorized';
export type PlatformRole = 'viewer' | 'operator' | 'admin';
export interface PlatformSession {
name: string;
role: PlatformRole;
authMode: 'disabled' | 'enforce';
}
export function getAccessToken() {
return window.sessionStorage.getItem(TOKEN_KEY) ?? '';
}
export function setAccessToken(token: string) {
const normalized = token.trim();
if (normalized) window.sessionStorage.setItem(TOKEN_KEY, normalized);
else window.sessionStorage.removeItem(TOKEN_KEY);
}
export function clearAccessToken() {
window.sessionStorage.removeItem(TOKEN_KEY);
}
export function notifyUnauthorizedSession(rejectedToken: string) {
if (!rejectedToken || getAccessToken() !== rejectedToken) return false;
clearAccessToken();
window.dispatchEvent(new Event(PLATFORM_UNAUTHORIZED_EVENT));
return true;
}
export function canOperate(session: PlatformSession) {
return session.role === 'operator' || session.role === 'admin';
}
export function canAdminister(session: PlatformSession) {
return session.role === 'admin';
}