자재관리: - 입고관리 재고조정 다이얼로그 신규 추가, 상세/목록 기능 확장 - 재고현황 컴포넌트 리팩토링 출고관리: - 출하관리 생성/수정/목록/상세 개선 - 차량배차관리 상세/수정/목록 기능 보강 생산관리: - 작업지시서 WIP 생산 모달 신규 추가 - 벤딩WIP/슬랫조인트바 검사 콘텐츠 신규 추가 - 작업자화면 기능 대폭 확장 (카드/목록 개선) - 검사성적서 모달 개선 품질관리: - 실적보고서 관리 페이지 신규 추가 - 검사관리 문서/타입/목데이터 개선 단가관리: - 단가배포 페이지 및 컴포넌트 신규 추가 - 단가표 관리 페이지 및 컴포넌트 신규 추가 공통: - 권한 시스템 추가 개선 (PermissionContext, usePermission, PermissionGuard) - 메뉴 폴링 훅 개선, 레이아웃 수정 - 모바일 줌/패닝 CSS 수정 - locale 유틸 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
'use client';
|
|
|
|
import { usePermission } from '@/hooks/usePermission';
|
|
import type { PermissionAction, UsePermissionReturn } from '@/lib/permissions/types';
|
|
|
|
interface PermissionGuardProps {
|
|
action: PermissionAction;
|
|
/** 다른 메뉴 권한 체크 시 URL 직접 지정 (생략하면 현재 URL 자동 매칭) */
|
|
url?: string;
|
|
/** 권한 없을 때 대체 UI (기본: 렌더링 안 함) */
|
|
fallback?: React.ReactNode;
|
|
children: React.ReactNode;
|
|
}
|
|
|
|
/**
|
|
* 버튼/영역 레벨 권한 제어 컴포넌트
|
|
*
|
|
* @example
|
|
* // 현재 페이지 기준 (URL 자동매칭)
|
|
* <PermissionGuard action="delete">
|
|
* <Button variant="destructive">삭제</Button>
|
|
* </PermissionGuard>
|
|
*
|
|
* // 다른 메뉴 권한 체크
|
|
* <PermissionGuard action="approve" url="/approval/inbox">
|
|
* <Button>승인</Button>
|
|
* </PermissionGuard>
|
|
*/
|
|
export function PermissionGuard({
|
|
action,
|
|
url,
|
|
fallback = null,
|
|
children,
|
|
}: PermissionGuardProps) {
|
|
const permission = usePermission(url);
|
|
|
|
const key = `can${action.charAt(0).toUpperCase()}${action.slice(1)}` as keyof UsePermissionReturn;
|
|
if (!permission[key]) {
|
|
return <>{fallback}</>;
|
|
}
|
|
|
|
return <>{children}</>;
|
|
}
|