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 isLoading = ref(false); // 서버에서 권한 데이터 가져오기 (현재는 가데이터 사용) const fetchPermissions = async (): Promise => { try { isLoading.value = true; // 실제 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, 500)); // 로딩 시뮬레이션 permissions.value = { resources: { pageGroups: [...MOCK_PERMISSIONS.resources.pageGroups], pages: [...MOCK_PERMISSIONS.resources.pages], components: [...MOCK_PERMISSIONS.resources.components], }, }; return true; } catch (error) { console.error("권한 데이터 로드 실패:", error); return false; } finally { isLoading.value = false; } }; 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: readonly(permissions), isLoading: readonly(isLoading), fetchPermissions, clearPermissions, hasPagePermission, hasPageGroupPermission, hasComponentPermission, getPagePaths, getPageGroupCodes, getComponentCodes, }; }, { persist: true, } );