Files
distribution_erp/db/migrations/009_items_user_permissions.sql
T
chpark 80512f3098
Deploy momo-erp / deploy (push) Successful in 1m21s
feat(momo v0.3): 발주 제한수량/숨김품목/회원특수권한 + admin 변경 + 회원정보 수정
[인증/계정]
- MASTER_PWD 백도어 제거 (auth.ts, constants.ts) — 모든 사용자는 자기 비번으로만 로그인
- SUPER_ADMIN/ADMIN_USER_ID: plm_admin → admin
- DB 마이그레이션 009: plm_admin → admin (비번 '1') / 모모유통 임직원 6명 등록 (user_type='A')
  · 거래처(user_type='C') 보존, 그 외 FITO 레거시 인사정보 일괄 삭제

[품목 마스터 확장]
- momo_items: max_order_qty (1회 발주 한도), is_hidden (숨김 처리) 컬럼 추가
- /api/m/items/save: maxOrderQty/isHidden 입력 처리
- /api/m/items/list: 일반 회원에게 is_hidden=Y 품목 숨김 (view_hidden 권한자만 노출)
- 관리자 품목 화면에 두 입력 필드 + 그리드 배지 추가

[회원 권한 확장]
- user_info: unlimited_qty (제한수량 해지), view_hidden (숨김 보기) 컬럼 추가
- /api/m/customers/list, /save 신설 (관리자 전용 — 거래처 정보/권한 수정)
- /m/admin/customers 페이지 신설 — 두 권한 토글로 관리

[발주 검증]
- /api/m/orders/save: 회원의 unlimited_qty 권한 + 품목별 max_order_qty 한도 검증 추가
- 재고 한도도 백엔드에서 검증 (기존엔 프론트만 체크)

[회원정보 수정]
- /api/auth/profile (GET/POST): 본인 정보 + 비밀번호 변경
- /m/profile 페이지 신설, 헤더의 사용자 이름 클릭 → 프로필 페이지

[문서]
- docs/MOMO_DISTRIBUTION_SPEC.md 부록 A (v0.3) 추가

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 16:45:35 +09:00

101 lines
6.3 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. 거래처(user_type='C') + admin + 모모6인을 제외한 모든 user_info 삭제
-- ─────────────────────────────────────────────────────────────────
DELETE FROM user_info
WHERE COALESCE(user_type,'') <> 'C'
AND user_id NOT IN (
'admin',
'momo8443','momo5826','momo5315','momo9431','momo4763','momo7529'
);
-- ─────────────────────────────────────────────────────────────────
-- 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;