forked from wangziqi/gongxue-base
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
export const PERMISSIONS_UPDATED_EVENT = 'permissions-updated';
|
|
|
|
export type PermissionStatus = 'unknown' | 'loading' | 'ready';
|
|
|
|
export interface PermissionState {
|
|
permissions: string[];
|
|
status: PermissionStatus;
|
|
}
|
|
|
|
let permissionState: PermissionState = { permissions: [], status: 'unknown' };
|
|
|
|
function notifyPermissionStateChanged(): void {
|
|
window.dispatchEvent(new Event(PERMISSIONS_UPDATED_EVENT));
|
|
}
|
|
|
|
export function readPermissionState(): PermissionState {
|
|
return permissionState;
|
|
}
|
|
|
|
export function readPermissions(): string[] {
|
|
return permissionState.status === 'ready' ? permissionState.permissions : [];
|
|
}
|
|
|
|
export function beginPermissionVerification(): void {
|
|
permissionState = { permissions: [], status: 'loading' };
|
|
notifyPermissionStateChanged();
|
|
}
|
|
|
|
export function writePermissions(permissions: string[]): void {
|
|
const uniquePermissions = [...new Set(permissions)];
|
|
localStorage.setItem('permissions', JSON.stringify(uniquePermissions));
|
|
permissionState = { permissions: uniquePermissions, status: 'ready' };
|
|
notifyPermissionStateChanged();
|
|
}
|
|
|
|
export function clearPermissions(status: PermissionStatus = 'unknown'): void {
|
|
localStorage.removeItem('permissions');
|
|
permissionState = { permissions: [], status };
|
|
notifyPermissionStateChanged();
|
|
}
|