[권한 시스템 정리] 불필요한 권한 체크 함수 및 관련 코드 제거, 리소스 구조 개선
This commit is contained in:
@@ -18,26 +18,6 @@ export const usePermission = () => {
|
|||||||
hasComponentPermission: (component: string) =>
|
hasComponentPermission: (component: string) =>
|
||||||
permissionsStore.hasComponentPermission(component),
|
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),
|
permissions: computed(() => permissionsStore.permissions),
|
||||||
resources: computed(() => permissionsStore.permissions?.resources),
|
resources: computed(() => permissionsStore.permissions?.resources),
|
||||||
|
|||||||
@@ -297,60 +297,6 @@
|
|||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { UserPermissions, Resource } from "~/types/permissions";
|
import type { UserPermissions } from "~/types/permissions";
|
||||||
import { MOCK_PERMISSIONS } from "~/types/permissions";
|
import { MOCK_PERMISSIONS } from "~/types/permissions";
|
||||||
|
|
||||||
export const usePermissionsStore = defineStore(
|
export const usePermissionsStore = defineStore(
|
||||||
@@ -23,20 +23,18 @@ export const usePermissionsStore = defineStore(
|
|||||||
|
|
||||||
// 실제 API 호출 (백엔드 준비되면 주석 해제)
|
// 실제 API 호출 (백엔드 준비되면 주석 해제)
|
||||||
/*
|
/*
|
||||||
const { success, data } = await useApi<{
|
const { success, data } = await useApi<UserPermissions>('/auth/permissions', {
|
||||||
pagePermissions: string[];
|
|
||||||
menuPermissions: string[];
|
|
||||||
componentPermissions: string[];
|
|
||||||
}>('/auth/permissions', {
|
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
handleError: false
|
handleError: false
|
||||||
});
|
});
|
||||||
|
|
||||||
if (success && data) {
|
if (success && data) {
|
||||||
permissions.value = {
|
permissions.value = {
|
||||||
pagePermissions: data.pagePermissions || [],
|
resources: {
|
||||||
menuPermissions: data.menuPermissions || [],
|
pageGroups: data.resources?.pageGroups || [],
|
||||||
componentPermissions: data.componentPermissions || []
|
pages: data.resources?.pages || [],
|
||||||
|
components: data.resources?.components || []
|
||||||
|
}
|
||||||
};
|
};
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -63,7 +61,6 @@ export const usePermissionsStore = defineStore(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 헬퍼 함수들 - 기존 호환성을 위한 함수들
|
|
||||||
const getPagePaths = (): string[] => {
|
const getPagePaths = (): string[] => {
|
||||||
return permissions.value.resources.pages
|
return permissions.value.resources.pages
|
||||||
.map(page => page.path)
|
.map(page => page.path)
|
||||||
@@ -82,7 +79,6 @@ export const usePermissionsStore = defineStore(
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 권한 체크 함수들 (기존 호환성 유지)
|
|
||||||
const hasPagePermission = (page: string): boolean => {
|
const hasPagePermission = (page: string): boolean => {
|
||||||
return getPagePaths().includes(page);
|
return getPagePaths().includes(page);
|
||||||
};
|
};
|
||||||
@@ -95,97 +91,6 @@ export const usePermissionsStore = defineStore(
|
|||||||
return getComponentCodes().includes(component);
|
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 = () => {
|
const clearPermissions = () => {
|
||||||
permissions.value = {
|
permissions.value = {
|
||||||
@@ -198,32 +103,19 @@ export const usePermissionsStore = defineStore(
|
|||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
// 상태
|
|
||||||
permissions: readonly(permissions),
|
permissions: readonly(permissions),
|
||||||
isLoading: readonly(isLoading),
|
isLoading: readonly(isLoading),
|
||||||
|
|
||||||
// 액션
|
|
||||||
fetchPermissions,
|
fetchPermissions,
|
||||||
clearPermissions,
|
clearPermissions,
|
||||||
|
|
||||||
// 기존 호환성 함수들
|
|
||||||
hasPagePermission,
|
hasPagePermission,
|
||||||
hasPageGroupPermission,
|
hasPageGroupPermission,
|
||||||
hasComponentPermission,
|
hasComponentPermission,
|
||||||
hasAnyPagePermission,
|
|
||||||
hasAnyPageGroupPermission,
|
|
||||||
hasAnyComponentPermission,
|
|
||||||
|
|
||||||
// 헬퍼 함수들
|
|
||||||
getPagePaths,
|
getPagePaths,
|
||||||
getPageGroupCodes,
|
getPageGroupCodes,
|
||||||
getComponentCodes,
|
getComponentCodes,
|
||||||
|
|
||||||
// 새로운 계층 구조 권한 체크 함수들
|
|
||||||
hasResourcePermission,
|
|
||||||
getResourceByCode,
|
|
||||||
getResourceByPath,
|
|
||||||
getChildResources,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ export interface Resource {
|
|||||||
description?: string; // 리소스 설명
|
description?: string; // 리소스 설명
|
||||||
menuYn?: string; // 메뉴 여부 (char(1))
|
menuYn?: string; // 메뉴 여부 (char(1))
|
||||||
componentType?: string; // 컴포넌트 세부 타입 (버튼, 그리드 등)
|
componentType?: string; // 컴포넌트 세부 타입 (버튼, 그리드 등)
|
||||||
children?: Resource[]; // 자식 리소스들 (계층 구조)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 사용자 권한 구조 (계층적 리소스 관리)
|
// 사용자 권한 구조 (계층적 리소스 관리)
|
||||||
|
|||||||
Reference in New Issue
Block a user