diff --git a/composables/usePermission.ts b/composables/usePermission.ts index 7594d95..48b10e9 100644 --- a/composables/usePermission.ts +++ b/composables/usePermission.ts @@ -18,26 +18,6 @@ export const usePermission = () => { hasComponentPermission: (component: string) => permissionsStore.hasComponentPermission(component), - // 여러 권한 중 하나라도 있는지 체크 - hasAnyPagePermission: (pages: string[]) => - permissionsStore.hasAnyPagePermission(pages), - hasAnyPageGroupPermission: (pageGroups: string[]) => - permissionsStore.hasAnyPageGroupPermission(pageGroups), - hasAnyComponentPermission: (components: string[]) => - permissionsStore.hasAnyComponentPermission(components), - - // 모든 권한이 있는지 체크 - hasAllPagePermissions: (pages: string[]) => - pages.every(page => permissionsStore.hasPagePermission(page)), - hasAllPageGroupPermissions: (pageGroups: string[]) => - pageGroups.every(pageGroup => - permissionsStore.hasPageGroupPermission(pageGroup) - ), - hasAllComponentPermissions: (components: string[]) => - components.every(component => - permissionsStore.hasComponentPermission(component) - ), - // 권한 데이터 직접 접근 permissions: computed(() => permissionsStore.permissions), resources: computed(() => permissionsStore.permissions?.resources), diff --git a/pages/[tabId]/test/permission-test.vue b/pages/[tabId]/test/permission-test.vue index 62746f3..e7f162a 100644 --- a/pages/[tabId]/test/permission-test.vue +++ b/pages/[tabId]/test/permission-test.vue @@ -297,60 +297,6 @@ }}

- -
-

- 여러 권한 중 하나라도 있는지: -

-

- hasAnyComponentPermission(['C010105', 'C010102']) -

-

- {{ - permission.hasAnyComponentPermission(["C010105", "C010102"]) - ? "true" - : "false" - }} -

-
- -
-

- 모든 권한이 있는지: -

-

- hasAllComponentPermissions(['C010105', 'C010102']) -

-

- {{ - permission.hasAllComponentPermissions([ - "C010105", - "C010102", - ]) - ? "true" - : "false" - }} -

-
diff --git a/stores/permissions.ts b/stores/permissions.ts index 9eec734..1bfdb1c 100644 --- a/stores/permissions.ts +++ b/stores/permissions.ts @@ -1,4 +1,4 @@ -import type { UserPermissions, Resource } from "~/types/permissions"; +import type { UserPermissions } from "~/types/permissions"; import { MOCK_PERMISSIONS } from "~/types/permissions"; export const usePermissionsStore = defineStore( @@ -23,20 +23,18 @@ export const usePermissionsStore = defineStore( // 실제 API 호출 (백엔드 준비되면 주석 해제) /* - const { success, data } = await useApi<{ - pagePermissions: string[]; - menuPermissions: string[]; - componentPermissions: string[]; - }>('/auth/permissions', { + const { success, data } = await useApi('/auth/permissions', { method: 'GET', handleError: false }); if (success && data) { permissions.value = { - pagePermissions: data.pagePermissions || [], - menuPermissions: data.menuPermissions || [], - componentPermissions: data.componentPermissions || [] + resources: { + pageGroups: data.resources?.pageGroups || [], + pages: data.resources?.pages || [], + components: data.resources?.components || [] + } }; return true; } @@ -63,7 +61,6 @@ export const usePermissionsStore = defineStore( } }; - // 헬퍼 함수들 - 기존 호환성을 위한 함수들 const getPagePaths = (): string[] => { return permissions.value.resources.pages .map(page => page.path) @@ -82,7 +79,6 @@ export const usePermissionsStore = defineStore( ); }; - // 권한 체크 함수들 (기존 호환성 유지) const hasPagePermission = (page: string): boolean => { return getPagePaths().includes(page); }; @@ -95,97 +91,6 @@ export const usePermissionsStore = defineStore( return getComponentCodes().includes(component); }; - // 여러 권한 중 하나라도 있는지 체크 - const hasAnyPagePermission = (pages: string[]): boolean => { - return pages.some(page => hasPagePermission(page)); - }; - - const hasAnyPageGroupPermission = (pageGroups: string[]): boolean => { - return pageGroups.some(pageGroup => hasPageGroupPermission(pageGroup)); - }; - - const hasAnyComponentPermission = (components: string[]): boolean => { - return components.some(component => hasComponentPermission(component)); - }; - - // 계층 구조를 고려한 권한 체크 함수들 - const hasResourcePermission = (resourceCode: string): boolean => { - return ( - findResourceByCode(permissions.value.resources, resourceCode) !== - undefined - ); - }; - - const getResourceByCode = (code: string): Resource | undefined => { - return findResourceByCode(permissions.value.resources, code); - }; - - const getResourceByPath = (path: string): Resource | undefined => { - return findResourceByPath(permissions.value.resources, path); - }; - - const getChildResources = (parentCode: string): Resource[] => { - const parent = findResourceByCode( - permissions.value.resources, - parentCode - ); - return parent?.children || []; - }; - - // 계층 구조에서 리소스 찾기 헬퍼 함수들 - - const findResourceByCode = ( - resources: { - pageGroups: Resource[]; - pages: Resource[]; - components: Resource[]; - }, - code: string - ): Resource | undefined => { - const allResources = [ - ...resources.pageGroups, - ...resources.pages, - ...resources.components, - ]; - for (const resource of allResources) { - if (resource.code === code) return resource; - if (resource.children) { - const found = findResourceByCode( - { pageGroups: [], pages: [], components: resource.children }, - code - ); - if (found) return found; - } - } - return undefined; - }; - - const findResourceByPath = ( - resources: { - pageGroups: Resource[]; - pages: Resource[]; - components: Resource[]; - }, - path: string - ): Resource | undefined => { - const allResources = [ - ...resources.pageGroups, - ...resources.pages, - ...resources.components, - ]; - for (const resource of allResources) { - if (resource.path === path) return resource; - if (resource.children) { - const found = findResourceByPath( - { pageGroups: [], pages: [], components: resource.children }, - path - ); - if (found) return found; - } - } - return undefined; - }; - // 권한 초기화 const clearPermissions = () => { permissions.value = { @@ -198,32 +103,19 @@ export const usePermissionsStore = defineStore( }; return { - // 상태 permissions: readonly(permissions), isLoading: readonly(isLoading), - // 액션 fetchPermissions, clearPermissions, - // 기존 호환성 함수들 hasPagePermission, hasPageGroupPermission, hasComponentPermission, - hasAnyPagePermission, - hasAnyPageGroupPermission, - hasAnyComponentPermission, - // 헬퍼 함수들 getPagePaths, getPageGroupCodes, getComponentCodes, - - // 새로운 계층 구조 권한 체크 함수들 - hasResourcePermission, - getResourceByCode, - getResourceByPath, - getChildResources, }; }, { diff --git a/types/permissions.ts b/types/permissions.ts index d22f8d1..d84a286 100644 --- a/types/permissions.ts +++ b/types/permissions.ts @@ -24,7 +24,6 @@ export interface Resource { description?: string; // 리소스 설명 menuYn?: string; // 메뉴 여부 (char(1)) componentType?: string; // 컴포넌트 세부 타입 (버튼, 그리드 등) - children?: Resource[]; // 자식 리소스들 (계층 구조) } // 사용자 권한 구조 (계층적 리소스 관리)