import type { UserPermissions } from "~/types/permissions"; import { MOCK_PERMISSIONS } from "~/types/permissions"; export const usePermissionsStore = defineStore( "permissions", () => { // 권한 데이터 상태 const permissions = ref({ resources: { pageGroups: [], pages: [], components: [], }, }); // 서버에서 권한 데이터 가져오기 (현재는 가데이터 사용) const fetchPermissions = async (): Promise => { const { withLoading } = useLoading(); return await withLoading(async () => { // 실제 API 호출 (백엔드 준비되면 주석 해제) /* const { success, data } = await useApi('/auth/permissions', { method: 'GET', handleError: false }); if (success && data) { permissions.value = { resources: { pageGroups: data.resources?.pageGroups || [], pages: data.resources?.pages || [], components: data.resources?.components || [] } }; return true; } return false; */ // 임시 가데이터 사용 await new Promise(resolve => setTimeout(resolve, 3000)); // 로딩 시뮬레이션 permissions.value = { resources: { pageGroups: [...MOCK_PERMISSIONS.resources.pageGroups], pages: [...MOCK_PERMISSIONS.resources.pages], components: [...MOCK_PERMISSIONS.resources.components], }, }; return true; }, "권한 정보를 불러오는 중..."); }; const getPagePaths = (): string[] => { return permissions.value.resources.pages .map(page => page.path) .filter(Boolean) as string[]; }; const getPageGroupCodes = (): string[] => { return permissions.value.resources.pageGroups.map( pageGroup => pageGroup.code ); }; const getComponentCodes = (): string[] => { return permissions.value.resources.components.map( component => component.code ); }; const hasPagePermission = (page: string): boolean => { return getPagePaths().includes(page); }; const hasPageGroupPermission = (pageGroup: string): boolean => { return getPageGroupCodes().includes(pageGroup); }; const hasComponentPermission = (component: string): boolean => { return getComponentCodes().includes(component); }; // 권한 초기화 const clearPermissions = () => { permissions.value = { resources: { pageGroups: [], pages: [], components: [], }, }; }; return { permissions, fetchPermissions, clearPermissions, hasPagePermission, hasPageGroupPermission, hasComponentPermission, getPagePaths, getPageGroupCodes, getComponentCodes, }; }, { persist: true, } );