80512f3098
Deploy momo-erp / deploy (push) Successful in 1m21s
[인증/계정] - 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>
101 lines
6.3 KiB
PL/PgSQL
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;
|