Files
bio_frontend/stores/permissions.ts

116 lines
2.9 KiB
TypeScript
Raw Normal View History

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