[권한 시스템 정리] 불필요한 권한 체크 함수 및 관련 코드 제거, 리소스 구조 개선

This commit is contained in:
2025-09-24 10:19:23 +09:00
parent d278b635e7
commit 1229faa777
4 changed files with 7 additions and 190 deletions

View File

@@ -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),

View File

@@ -297,60 +297,6 @@
}}
</p>
</div>
<div class="p-3 bg-gray-50 rounded border">
<h4 class="font-medium text-gray-900 mb-2 text-sm">
여러 권한 하나라도 있는지:
</h4>
<p class="text-xs text-gray-600 mb-1">
<code>hasAnyComponentPermission(['C010105', 'C010102'])</code>
</p>
<p
class="text-sm font-semibold"
:class="
permission.hasAnyComponentPermission(['C010105', 'C010102'])
? 'text-green-600'
: 'text-red-600'
"
>
{{
permission.hasAnyComponentPermission(["C010105", "C010102"])
? "true"
: "false"
}}
</p>
</div>
<div class="p-3 bg-gray-50 rounded border">
<h4 class="font-medium text-gray-900 mb-2 text-sm">
모든 권한이 있는지:
</h4>
<p class="text-xs text-gray-600 mb-1">
<code
>hasAllComponentPermissions(['C010105', 'C010102'])</code
>
</p>
<p
class="text-sm font-semibold"
:class="
permission.hasAllComponentPermissions([
'C010105',
'C010102',
])
? 'text-green-600'
: 'text-red-600'
"
>
{{
permission.hasAllComponentPermissions([
"C010105",
"C010102",
])
? "true"
: "false"
}}
</p>
</div>
</div>
</div>
</div>

View File

@@ -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<UserPermissions>('/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,
};
},
{

View File

@@ -24,7 +24,6 @@ export interface Resource {
description?: string; // 리소스 설명
menuYn?: string; // 메뉴 여부 (char(1))
componentType?: string; // 컴포넌트 세부 타입 (버튼, 그리드 등)
children?: Resource[]; // 자식 리소스들 (계층 구조)
}
// 사용자 권한 구조 (계층적 리소스 관리)