From 1229faa77757b0bab71376d0449d311dd7220036 Mon Sep 17 00:00:00 2001
From: sohot8653
Date: Wed, 24 Sep 2025 10:19:23 +0900
Subject: [PATCH] =?UTF-8?q?[=EA=B6=8C=ED=95=9C=20=EC=8B=9C=EC=8A=A4?=
=?UTF-8?q?=ED=85=9C=20=EC=A0=95=EB=A6=AC]=20=EB=B6=88=ED=95=84=EC=9A=94?=
=?UTF-8?q?=ED=95=9C=20=EA=B6=8C=ED=95=9C=20=EC=B2=B4=ED=81=AC=20=ED=95=A8?=
=?UTF-8?q?=EC=88=98=20=EB=B0=8F=20=EA=B4=80=EB=A0=A8=20=EC=BD=94=EB=93=9C?=
=?UTF-8?q?=20=EC=A0=9C=EA=B1=B0,=20=EB=A6=AC=EC=86=8C=EC=8A=A4=20?=
=?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=EC=84=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
composables/usePermission.ts | 20 ----
pages/[tabId]/test/permission-test.vue | 54 -----------
stores/permissions.ts | 122 ++-----------------------
types/permissions.ts | 1 -
4 files changed, 7 insertions(+), 190 deletions(-)
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[]; // 자식 리소스들 (계층 구조)
}
// 사용자 권한 구조 (계층적 리소스 관리)