리소스 가시성(READ/HIDE) 단일 차원에서 리소스 × 오퍼레이션(RCUD) 2차원 권한 모델로 전환하여 세밀한 CRUD 권한 제어 지원. - DB: AUTH_PERM에 OPER_CD 컬럼 추가, 마이그레이션 004 작성 - DB: AUTH_PERM_TREE 리소스 트리 테이블 추가 (마이그레이션 003) - Backend: permResolver 2차원 권한 해석 엔진 (상속 + 오퍼레이션) - Backend: requirePermission 미들웨어 신규 (리소스×오퍼레이션 검증) - Backend: authService permissions → Record<string, string[]> 반환 - Backend: roleService/roleRouter OPER_CD 지원 API - Backend: Helmet CORP 설정 (sendBeacon cross-origin 허용) - Frontend: authStore.hasPermission(resource, operation?) 하위 호환 확장 - Frontend: PermissionsPanel 역할탭 + RCUD 4열 매트릭스 UI 전면 재작성 - Frontend: sendBeacon API_BASE_URL 절대경로 전환 - Docs: COMMON-GUIDE 권한 체계 + CRUD API 규칙 문서화 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
109 lines
5.8 KiB
SQL
109 lines
5.8 KiB
SQL
-- ============================================================
|
|
-- AUTH_PERM_TREE: 트리 구조 기반 리소스(메뉴) 권한 정의
|
|
-- 부모-자식 관계로 N-depth 서브탭 권한 제어 지원
|
|
-- ============================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS AUTH_PERM_TREE (
|
|
RSRC_CD VARCHAR(50) NOT NULL, -- 콜론 구분 경로: 'prediction', 'aerial:media'
|
|
PARENT_CD VARCHAR(50), -- NULL이면 최상위 탭
|
|
RSRC_NM VARCHAR(100) NOT NULL, -- 표시명
|
|
RSRC_DESC VARCHAR(200), -- 설명 (NULL 허용)
|
|
ICON VARCHAR(20), -- 아이콘 (NULL 허용, 선택 옵션)
|
|
RSRC_LEVEL SMALLINT NOT NULL DEFAULT 0, -- depth (0=탭, 1=서브탭, 2+)
|
|
SORT_ORD SMALLINT NOT NULL DEFAULT 0, -- 형제 노드 간 정렬
|
|
USE_YN CHAR(1) NOT NULL DEFAULT 'Y',
|
|
CONSTRAINT PK_PERM_TREE PRIMARY KEY (RSRC_CD),
|
|
CONSTRAINT FK_PERM_TREE_PARENT FOREIGN KEY (PARENT_CD)
|
|
REFERENCES AUTH_PERM_TREE(RSRC_CD)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS IDX_PERM_TREE_PARENT ON AUTH_PERM_TREE(PARENT_CD);
|
|
|
|
-- ============================================================
|
|
-- 초기 데이터
|
|
-- ============================================================
|
|
|
|
-- Level 0: 메인 탭 (11개)
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_DESC, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('prediction', NULL, '유출유 확산예측', '확산 예측 실행 및 결과 조회', 0, 1),
|
|
('hns', NULL, 'HNS·대기확산', '대기확산 분석 실행 및 조회', 0, 2),
|
|
('rescue', NULL, '긴급구난', '구난 예측 실행 및 조회', 0, 3),
|
|
('reports', NULL, '보고자료', '사고 보고서 작성 및 조회', 0, 4),
|
|
('aerial', NULL, '항공탐색', '항공 탐색 데이터 조회', 0, 5),
|
|
('assets', NULL, '방제자산 관리', '방제 장비 및 자산 관리', 0, 6),
|
|
('scat', NULL, '해안평가', 'SCAT 조사 실행 및 조회', 0, 7),
|
|
('board', NULL, '게시판', '자료실 및 공지사항 조회', 0, 8),
|
|
('weather', NULL, '기상정보', '기상 및 해상 정보 조회', 0, 9),
|
|
('incidents', NULL, '통합조회', '사고 상세 정보 조회', 0, 10),
|
|
('admin', NULL, '관리', '사용자 및 권한 관리', 0, 11)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|
|
|
|
-- Level 1: prediction 하위
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('prediction:analysis', 'prediction', '확산분석', 1, 1),
|
|
('prediction:list', 'prediction', '분석 목록', 1, 2),
|
|
('prediction:theory', 'prediction', '확산모델 이론', 1, 3),
|
|
('prediction:boom-theory', 'prediction', '오일펜스 배치 이론', 1, 4)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|
|
|
|
-- Level 1: hns 하위
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('hns:analysis', 'hns', '대기확산 분석', 1, 1),
|
|
('hns:list', 'hns', '분석 목록', 1, 2),
|
|
('hns:scenario', 'hns', '시나리오 관리', 1, 3),
|
|
('hns:manual', 'hns', 'HNS 대응매뉴얼', 1, 4),
|
|
('hns:theory', 'hns', '확산모델 이론', 1, 5),
|
|
('hns:substance', 'hns', 'HNS 물질정보', 1, 6)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|
|
|
|
-- Level 1: rescue 하위
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('rescue:rescue', 'rescue', '긴급구난예측', 1, 1),
|
|
('rescue:list', 'rescue', '긴급구난 목록', 1, 2),
|
|
('rescue:scenario', 'rescue', '시나리오 관리', 1, 3),
|
|
('rescue:theory', 'rescue', '긴급구난모델 이론', 1, 4)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|
|
|
|
-- Level 1: reports 하위
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('reports:report-list', 'reports', '보고서 목록', 1, 1),
|
|
('reports:template', 'reports', '표준보고서 템플릿', 1, 2),
|
|
('reports:generate', 'reports', '보고서 생성', 1, 3)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|
|
|
|
-- Level 1: aerial 하위
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('aerial:media', 'aerial', '영상사진관리', 1, 1),
|
|
('aerial:analysis', 'aerial', '유출유면적분석', 1, 2),
|
|
('aerial:realtime', 'aerial', '실시간드론', 1, 3),
|
|
('aerial:sensor', 'aerial', '오염/선박3D분석', 1, 4),
|
|
('aerial:satellite', 'aerial', '위성요청', 1, 5),
|
|
('aerial:cctv', 'aerial', 'CCTV 조회', 1, 6),
|
|
('aerial:theory', 'aerial', '항공탐색 이론', 1, 7)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|
|
|
|
-- Level 1: assets 하위
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('assets:management', 'assets', '자산 관리', 1, 1),
|
|
('assets:upload', 'assets', '자산 현행화', 1, 2),
|
|
('assets:theory', 'assets', '방제자원 이론', 1, 3),
|
|
('assets:insurance', 'assets', '선박 보험정보', 1, 4)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|
|
|
|
-- Level 1: board 하위
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('board:all', 'board', '전체', 1, 1),
|
|
('board:notice', 'board', '공지사항', 1, 2),
|
|
('board:data', 'board', '자료실', 1, 3),
|
|
('board:qna', 'board', 'Q&A', 1, 4),
|
|
('board:manual', 'board', '해경매뉴얼', 1, 5)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|
|
|
|
-- Level 1: admin 하위
|
|
INSERT INTO AUTH_PERM_TREE (RSRC_CD, PARENT_CD, RSRC_NM, RSRC_LEVEL, SORT_ORD) VALUES
|
|
('admin:users', 'admin', '사용자 관리', 1, 1),
|
|
('admin:permissions', 'admin', '권한 관리', 1, 2),
|
|
('admin:menus', 'admin', '메뉴 관리', 1, 3),
|
|
('admin:settings', 'admin', '시스템 설정', 1, 4)
|
|
ON CONFLICT (RSRC_CD) DO NOTHING;
|