From e1be30f8caad48b835d6b1249eea025d69707b78 Mon Sep 17 00:00:00 2001 From: johngreen Date: Mon, 4 May 2026 13:16:10 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=A9=94=EB=89=B4=20=EC=88=9C=EC=84=9C?= =?UTF-8?q?=20V017=20=EC=9D=84=20=EB=AA=A8=EB=93=A0=20=ED=99=9C=EC=84=B1?= =?UTF-8?q?=20=ED=85=8C=EB=84=8C=ED=8A=B8=20DB=20=EC=97=90=EB=8F=84=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flyway V017 은 메타 DB 만 갱신하지만 MENU_INFO 의 슈퍼관리자 메뉴 (COMPANY_CODE='*') 는 회사 프로비저닝 때 각 테넌트 DB 로 복사되어 박혀있다. StartupSchemaMigrator 에 동일 UPDATE 를 넣어 부팅 시 메타 + 모든 활성 테넌트에 자동 동기화. SEQ 만 갱신하므로 멱등. --- .../erp/migration/StartupSchemaMigrator.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/backend-spring/src/main/java/com/erp/migration/StartupSchemaMigrator.java b/backend-spring/src/main/java/com/erp/migration/StartupSchemaMigrator.java index 1d3318cd..dd522eb4 100644 --- a/backend-spring/src/main/java/com/erp/migration/StartupSchemaMigrator.java +++ b/backend-spring/src/main/java/com/erp/migration/StartupSchemaMigrator.java @@ -41,7 +41,33 @@ public class StartupSchemaMigrator { private static final List MIGRATIONS = List.of( // RUN_082: 첫 로그인 비밀번호 강제 변경 플래그 - "ALTER TABLE USER_INFO ADD COLUMN IF NOT EXISTS FORCE_PASSWORD_CHANGE BOOLEAN DEFAULT FALSE" + "ALTER TABLE USER_INFO ADD COLUMN IF NOT EXISTS FORCE_PASSWORD_CHANGE BOOLEAN DEFAULT FALSE", + + // V017: 회사 관리 그룹 하위 관리자 메뉴 순서 재배열 + // 조직 계층(회사→부서→사용자) + 권한 체계(메뉴→권한→권한그룹) + // 메타 DB 는 Flyway V017 로도 적용되지만 프로비저닝된 테넌트 DB 는 + // 회사 생성 시점 스냅샷이 박혀있으므로 부팅 때 모든 활성 DB 에 동기화. + // SEQ 만 갱신 → 멱등. + """ + UPDATE MENU_INFO + SET SEQ = CASE MENU_NAME_KOR + WHEN '회사관리' THEN 100 + WHEN '부서관리' THEN 200 + WHEN '사용자관리' THEN 300 + WHEN '메뉴관리' THEN 400 + WHEN '권한관리' THEN 500 + WHEN '권한 그룹관리' THEN 600 + ELSE SEQ + END + WHERE MENU_TYPE = '0' + AND COMPANY_CODE = '*' + AND PARENT_OBJ_ID IS NOT NULL + AND PARENT_OBJ_ID <> '0' + AND MENU_NAME_KOR IN ( + '회사관리', '부서관리', '사용자관리', + '메뉴관리', '권한관리', '권한 그룹관리' + ) + """ ); @EventListener(ApplicationReadyEvent.class)