feat: TOTP 2차 인증, 관리자 메뉴/대시보드 및 의존성 반영

- robthree/twofactorauth, Auth 설정·TotpService·2FA 뷰·라우트
- member TOTP 컬럼 DDL(login_tables, member_add_totp.sql)
- 관리자 메뉴·레이아웃·필터·대시보드 등 연관 변경
- env 샘플에 auth.requireTotp 주석

Made-with: Cursor
This commit is contained in:
taekyoungc
2026-03-26 15:29:55 +09:00
parent d36217920f
commit a3f92cd322
32 changed files with 1416 additions and 66 deletions

View File

@@ -8,17 +8,19 @@ SET FOREIGN_KEY_CHECKS = 0;
-- member: 로그인·권한용 회원 테이블
-- mb_state: 1=정상, 2=정지, 0=탈퇴
-- mb_level: app/Config/Roles.php 참고
-- 1=일반 사용자, 2=지정판매소, 3=지자체관리자, 4=super admin
-- 1=일반 사용자, 2=지정판매소, 3=지자체관리자, 4=super admin, 5=본부 관리자
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `member` (
`mb_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '회원 PK',
`mb_id` VARCHAR(50) NOT NULL COMMENT '로그인 아이디',
`mb_passwd` VARCHAR(255) NOT NULL COMMENT '비밀번호 해시(password_hash)',
`mb_totp_secret` TEXT NULL DEFAULT NULL COMMENT 'TOTP 시크릿(암호화 저장, pii_encrypt)',
`mb_totp_enabled` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '1=등록 완료·검증 대상',
`mb_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '이름',
`mb_email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '이메일',
`mb_phone` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '연락처',
`mb_lang` VARCHAR(10) NOT NULL DEFAULT 'ko' COMMENT '언어',
`mb_level` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=일반, 2=지정판매소, 3=지자체관리자, 4=super admin (Roles.php)',
`mb_level` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=일반, 2=지정판매소, 3=지자체관리자, 4=super admin, 5=본부 관리자 (Roles.php)',
`mb_group` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '권한 그룹 코드(Phase 2)',
`mb_lg_idx` INT UNSIGNED NULL DEFAULT NULL COMMENT '소속 지자체 PK(지자체관리자만 사용)',
`mb_state` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=정상, 2=정지, 0=탈퇴',

View File

@@ -0,0 +1,9 @@
-- TOTP 2차 인증 컬럼 추가 (기존 DB 마이그레이션용)
-- docs/2차인증-TOTP-개발계획.md
-- 실행 예: mysql ... < writable/database/member_add_totp.sql
SET NAMES utf8mb4;
ALTER TABLE `member`
ADD COLUMN `mb_totp_secret` TEXT NULL DEFAULT NULL COMMENT 'TOTP 시크릿(Base32), 저장 시 pii_encrypt 권장' AFTER `mb_passwd`,
ADD COLUMN `mb_totp_enabled` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '1=등록·로그인 시 TOTP 검증' AFTER `mb_totp_secret`;