import { usePage } from '@inertiajs/react'; import { PageProps } from '@/types/global'; /** * 權限判斷 Hook * 提供權限與角色檢查功能 */ export function usePermission() { const { auth } = usePage().props; const user = auth.user; /** * 檢查使用者是否擁有指定權限 */ const can = (permission: string): boolean => { if (!user) return false; return user.permissions.includes(permission); }; /** * 檢查使用者是否擁有任一指定權限 */ const canAny = (permissions: string[]): boolean => { if (!user) return false; return permissions.some(p => user.permissions.includes(p)); }; /** * 檢查使用者是否擁有所有指定權限 */ const canAll = (permissions: string[]): boolean => { if (!user) return false; return permissions.every(p => user.permissions.includes(p)); }; /** * 檢查使用者是否擁有指定角色 */ const hasRole = (role: string): boolean => { if (!user) return false; return user.roles.includes(role); }; /** * 檢查使用者是否擁有任一指定角色 */ const hasAnyRole = (roles: string[]): boolean => { if (!user) return false; return roles.some(r => user.roles.includes(r)); }; /** * 檢查使用者是否擁有所有指定角色 */ const hasAllRoles = (roles: string[]): boolean => { if (!user) return false; return roles.every(r => user.roles.includes(r)); }; /** * 檢查使用者是否為超級管理員 */ const isSuperAdmin = (): boolean => { return hasRole('super-admin'); }; return { can, canAny, canAll, hasRole, hasAnyRole, hasAllRoles, isSuperAdmin, user }; }