f62660952b
Deploy momo-erp / deploy (push) Successful in 1m54s
[원인] - db/migrations/009_items_user_permissions.sql 가 user_type<>'C' AND NOT IN (admin 7인) 사용자를 삭제하는 정리 쿼리를 포함 - user_type 'C' → 'U' 통합 이후 'U' 거래처 134명이 위 조건에 걸려 매 배포마다 통째로 삭제됨 (어제·오늘 두 번 사용자 관리에 거래처 0명) [수정] - 해당 DELETE 블록 통째로 주석 처리 — 마이그레이션은 idempotent 해야 하고 destructive 작업은 두지 않는다는 원칙 - 거래처 134명은 별도 복구 스크립트로 다시 INSERT (이 commit 직후) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
98 lines
6.4 KiB
PL/PgSQL
98 lines
6.4 KiB
PL/PgSQL
-- 009_items_user_permissions.sql
|
|
-- v0.3 (2026-04-27)
|
|
-- 1) MASTER_PWD 백도어 제거 (코드 변경, DB 작업 없음)
|
|
-- 2) plm_admin → admin 으로 user_id 변경, 비밀번호 '1' (AES 암호화) 재설정
|
|
-- 3) 모모유통 임직원 6명 등록 (user_type='A', 비밀번호 'momo2026##')
|
|
-- 4) 거래처(user_type='C')는 보존, 그 외 FITO 레거시 인사정보는 일괄 삭제
|
|
-- 5) momo_items 에 max_order_qty, is_hidden 컬럼 추가
|
|
-- 6) user_info 에 unlimited_qty, view_hidden 컬럼 추가 (거래처 권한)
|
|
|
|
BEGIN;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
-- 1. plm_admin → admin 으로 user_id 변경 + 비밀번호 '1' 재설정
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
-- 기존 admin user_id 가 이미 있을 수 있으니 먼저 확인 후 처리
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (SELECT 1 FROM user_info WHERE user_id = 'plm_admin') THEN
|
|
-- 동시에 admin 이 이미 있으면 plm_admin 만 삭제
|
|
IF EXISTS (SELECT 1 FROM user_info WHERE user_id = 'admin') THEN
|
|
DELETE FROM user_info WHERE user_id = 'plm_admin';
|
|
ELSE
|
|
UPDATE user_info
|
|
SET user_id = 'admin',
|
|
user_password = 'i8+4uUD3yNGbj6Lz1er20A==',
|
|
user_type = 'A',
|
|
user_type_name = '관리자',
|
|
status = 'active'
|
|
WHERE user_id = 'plm_admin';
|
|
END IF;
|
|
END IF;
|
|
END $$;
|
|
|
|
-- 그래도 admin 이 없으면 신규 INSERT
|
|
INSERT INTO user_info (user_id, user_password, user_name, user_type, user_type_name, status, regdate)
|
|
SELECT 'admin', 'i8+4uUD3yNGbj6Lz1er20A==', '시스템 관리자', 'A', '관리자', 'active', NOW()
|
|
WHERE NOT EXISTS (SELECT 1 FROM user_info WHERE user_id = 'admin');
|
|
|
|
-- admin 비밀번호는 항상 '1' 로 재설정 (이미 존재하던 admin 도 통일)
|
|
UPDATE user_info
|
|
SET user_password = 'i8+4uUD3yNGbj6Lz1er20A==',
|
|
user_type = 'A',
|
|
user_type_name = '관리자',
|
|
status = 'active'
|
|
WHERE user_id = 'admin';
|
|
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
-- 2. 모모유통 임직원 6명 등록 (UPSERT)
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
INSERT INTO user_info
|
|
(user_id, user_password, user_name, position_name, cell_phone, email,
|
|
user_type, user_type_name, status, regdate)
|
|
VALUES
|
|
('momo8443','95sOzM8nDQRukpt02Uxuaw==','이상용','대표', '010-6369-8443','momo8443@daum.net', 'A','관리자','active',NOW()),
|
|
('momo5826','95sOzM8nDQRukpt02Uxuaw==','이윤정','총괄이사', '010-4082-5826','momo8443@daum.net', 'A','관리자','active',NOW()),
|
|
('momo5315','95sOzM8nDQRukpt02Uxuaw==','배연진','경영팀장', '010-6624-5315','momo8443@daum.net', 'A','관리자','active',NOW()),
|
|
('momo9431','95sOzM8nDQRukpt02Uxuaw==','강상익','김포지사 총괄', '010-5789-9431','momokimpo@nate.com', 'A','관리자','active',NOW()),
|
|
('momo4763','95sOzM8nDQRukpt02Uxuaw==','이효철','물류총괄', '010-4104-4763','momo8443@daum.net', 'A','관리자','active',NOW()),
|
|
('momo7529','95sOzM8nDQRukpt02Uxuaw==','유우형','물류팀장', '010-4134-7529','momo8443@daum.net', 'A','관리자','active',NOW())
|
|
ON CONFLICT (user_id) DO UPDATE SET
|
|
user_password = EXCLUDED.user_password,
|
|
user_name = EXCLUDED.user_name,
|
|
position_name = EXCLUDED.position_name,
|
|
cell_phone = EXCLUDED.cell_phone,
|
|
email = EXCLUDED.email,
|
|
user_type = EXCLUDED.user_type,
|
|
user_type_name = EXCLUDED.user_type_name,
|
|
status = EXCLUDED.status;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
-- 3. (DISABLED) 과거: 거래처(C) + admin + 모모6인 외 모든 사용자 삭제하던 정리 쿼리.
|
|
-- user_type 을 'C' → 'U' 로 통합한 뒤로 'U' 거래처 134명이 매 배포마다 삭제되는
|
|
-- 심각한 데이터 손실이 발생해서 비활성화함. 마이그레이션은 반드시 idempotent 해야 하므로
|
|
-- destructive 구문은 두지 않는다.
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
-- 4. momo_items 컬럼 추가: 발주 제한수량 + 숨김처리
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
ALTER TABLE momo_items
|
|
ADD COLUMN IF NOT EXISTS max_order_qty INTEGER,
|
|
ADD COLUMN IF NOT EXISTS is_hidden CHAR(1) NOT NULL DEFAULT 'N';
|
|
|
|
COMMENT ON COLUMN momo_items.max_order_qty IS '1회 발주 최대 수량 (NULL/0 = 제한 없음)';
|
|
COMMENT ON COLUMN momo_items.is_hidden IS '숨김 처리 (Y/N) — Y이면 view_hidden 권한 회원에게만 노출';
|
|
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
-- 5. user_info 컬럼 추가: 거래처 특수 권한
|
|
-- ─────────────────────────────────────────────────────────────────
|
|
ALTER TABLE user_info
|
|
ADD COLUMN IF NOT EXISTS unlimited_qty CHAR(1) NOT NULL DEFAULT 'N',
|
|
ADD COLUMN IF NOT EXISTS view_hidden CHAR(1) NOT NULL DEFAULT 'N';
|
|
|
|
COMMENT ON COLUMN user_info.unlimited_qty IS '제한수량 해지 권한 (Y/N) — Y이면 max_order_qty 무시';
|
|
COMMENT ON COLUMN user_info.view_hidden IS '숨김처리 보기 권한 (Y/N) — Y이면 is_hidden=Y 품목도 노출';
|
|
|
|
COMMIT;
|