## 회원가입 역할 승인 개발 계획 ### 1) 범위 - 회원가입(`register`) 역할 선택 정책 변경 - 승인 대기/승인 처리 기능 구현 - 로그인 차단/메시지 처리 - 관리자 승인 화면(`admin/access/approvals`) 실데이터 연동 --- ### 2) 구현 방향 승인 절차를 안정적으로 운영하기 위해 `member` 테이블만으로 처리하지 않고, 승인 이력을 분리 저장하는 전용 테이블을 도입한다. - 회원 기본 정보: `member` - 역할 승인 워크플로: `member_approval_request`(신규) --- ### 3) 데이터 설계 #### 3.1 신규 테이블: `member_approval_request` - `mar_idx` PK - `mb_idx` FK (`member.mb_idx`) - `requested_level` (요청 역할: 1,2,3) - `status` (`pending`, `approved`, `rejected`) - `request_note` (선택) - `reject_reason` (선택) - `requested_at` - `requested_by` (self 가입이면 본인) - `processed_at` - `processed_by` 인덱스 권장: - `(status, requested_at)` - `(mb_idx, status)` #### 3.2 member 보조 컬럼(선택) 아래 두 가지 중 하나 선택: - A안(권장): 승인 여부는 `member_approval_request` 최신 상태로 판단 - B안: `member`에 캐시성 플래그(`mb_approval_state`) 추가 본 계획은 A안을 기준으로 진행한다. --- ### 4) 백엔드 변경 계획 #### 4.1 `Auth::register()` - `mb_level` 검증을 `in_list[1,2,3]`로 제한 - `mb_level=4` 입력 시 서버에서 거부 - 회원 생성 후 `member_approval_request`에 `pending` 레코드 생성 - 회원 레벨은 즉시 활성화하지 않도록 정책 적용 - 방법 1: 임시 기본 레벨(예: 1) + 승인 전 로그인 차단 - 방법 2: 요청 레벨 별도 저장 후 승인 시 반영 #### 4.2 `Auth::login()` - 비밀번호 검증 성공 후 승인 상태 체크 추가 - `pending`이면 로그인 차단 + 메시지 - `rejected`이면 로그인 차단 + 메시지 - `approved`일 때만 기존 로그인 흐름 진행 #### 4.3 `Admin\Access` - `approvals()`: - `pending` 중심 목록 조회 - 필터(상태/기간/역할/지자체) 지원 - `approve($id)`: - 요청 상태 `pending` 검증 - 사용자 역할 갱신(`member.mb_level = requested_level`) - 요청 상태 `approved`/처리자/처리일 기록 - `reject($id)`: - 요청 상태 `rejected` + 반려 사유 기록 트랜잭션: - 승인/반려 처리 시 반드시 트랜잭션 사용 --- ### 5) 프론트(뷰) 변경 계획 #### 5.1 `app/Views/auth/register.php` - 역할 드롭다운에서 `super admin` 제거 - 안내 문구 추가: - `가입 후 관리자 승인 완료 시 로그인 가능합니다.` #### 5.2 `app/Views/admin/access/approvals.php` - 플레이스홀더 제거 - 실제 승인 대기 목록 렌더링 - 승인/반려 버튼 및 반려 사유 입력 UI 제공 --- ### 6) 권한/보안 규칙 - 공개 회원가입에서 `super admin` 요청 금지(서버 검증 필수) - 승인 API는 관리자 권한 필요 - 중복 처리 방지: - 이미 처리된 요청 재승인/재반려 차단 - 감사 로그: - 누가, 언제, 어떤 요청을 승인/반려했는지 기록 --- ### 7) 단계별 작업 순서 1. SQL 추가 (`writable/database`): 승인 요청 테이블 DDL 2. 모델 추가: `MemberApprovalRequestModel` 3. `Auth::register` 변경 (역할 제한 + 승인요청 생성) 4. `Auth::login` 변경 (승인 전 로그인 차단) 5. `Admin\Access` 목록/승인/반려 로직 구현 6. `approvals.php` UI 구현 7. 메시지/문구 정리 8. 테스트 및 회귀 점검 --- ### 8) 테스트 계획 핵심 케이스: - 회원가입 역할 선택 - 1/2/3 저장 성공 - 4 입력 시 거부 - 로그인 - 승인 전(`pending`) 로그인 실패 + 메시지 확인 - 승인 후 로그인 성공 + 역할별 리다이렉트 확인 - 승인 화면 - 목록 조회/필터 동작 - 승인 처리 후 사용자 역할 변경 확인 - 반려 처리 후 로그인 차단 메시지 확인 - 예외 - 이미 처리된 요청 재처리 차단 - 잘못된 요청 ID 처리 --- ### 9) 파일 변경 예정(구현 단계) - `app/Controllers/Auth.php` - `app/Controllers/Admin/Access.php` - `app/Views/auth/register.php` - `app/Views/admin/access/approvals.php` - `app/Models/MemberApprovalRequestModel.php` (신규) - `writable/database/*_member_approval_request.sql` (신규) --- ### 10) 오픈 이슈 - 승인 전 사용자의 `mb_level` 저장 전략 확정 필요 - 임시 레벨 사용 vs 요청 테이블 단일 소스 - 반려 후 재신청 UX - 기존 요청 재오픈 vs 신규 요청 생성 - 지자체관리자 승인 범위 정책 확정