import type { PermissionCode } from '@lingxi/shared'; import { useAuthStore } from '@/stores/auth-store'; /** 纯函数:权限点判断(便于单测与在非组件上下文复用) */ export function can( permissions: readonly string[], permission: PermissionCode | readonly PermissionCode[], mode: 'all' | 'any' = 'all', ): boolean { const required = typeof permission === 'string' ? [permission] : permission; if (required.length === 0) { return true; } return mode === 'all' ? required.every((code) => permissions.includes(code)) : required.some((code) => permissions.includes(code)); } /** 当前登录用户的权限点集合(/me 或登录响应写入 auth store) */ export function usePermissions(): readonly string[] { return useAuthStore((state) => state.permissions); } /** 单个(或一组)权限点判断;`mode='all'` 要求全部命中 */ export function usePermission( permission: PermissionCode | readonly PermissionCode[], mode: 'all' | 'any' = 'all', ): boolean { const permissions = usePermissions(); return can(permissions, permission, mode); }