fix permissions and teacher attendance workflows

This commit is contained in:
2026-07-10 20:40:52 +08:00
parent 247879f276
commit 8ed1682b90
95 changed files with 4745 additions and 1237 deletions

View File

@@ -1,21 +1,31 @@
import { useMemo } from 'react';
import { useCallback, useEffect, useState } from 'react';
import { PERMISSIONS_UPDATED_EVENT, readPermissions } from '../auth/permission-store';
export function usePermission() {
const permissions: string[] = useMemo(() => {
try {
return JSON.parse(localStorage.getItem('permissions') || '[]');
} catch {
return [];
}
const [permissions, setPermissions] = useState<string[]>(readPermissions);
useEffect(() => {
const refresh = () => setPermissions(readPermissions());
window.addEventListener(PERMISSIONS_UPDATED_EVENT, refresh);
window.addEventListener('storage', refresh);
return () => {
window.removeEventListener(PERMISSIONS_UPDATED_EVENT, refresh);
window.removeEventListener('storage', refresh);
};
}, []);
const hasPermission = (code: string): boolean => permissions.includes(code);
const hasAnyPermission = (...codes: string[]): boolean =>
codes.some((c) => permissions.includes(c));
const hasAllPermissions = (...codes: string[]): boolean =>
codes.every((c) => permissions.includes(c));
const hasPermission = useCallback(
(code: string): boolean => permissions.includes(code),
[permissions],
);
const hasAnyPermission = useCallback(
(...codes: string[]): boolean => codes.some((code) => permissions.includes(code)),
[permissions],
);
const hasAllPermissions = useCallback(
(...codes: string[]): boolean => codes.every((code) => permissions.includes(code)),
[permissions],
);
return { permissions, hasPermission, hasAnyPermission, hasAllPermissions };
}

View File

@@ -1,6 +1,7 @@
import { useCallback } from 'react';
import { Modal, message } from 'antd';
import { Modal } from 'antd';
import api from '../api';
import { message } from '../ui/app-message';
/**
* Shared hook for viewing sensitive student info (phone / ID number).