docs: add project docs and test updates

This commit is contained in:
taekyoungc
2026-04-08 00:23:55 +09:00
parent 06fedc866a
commit 06aa401048
238 changed files with 8373 additions and 148 deletions

View File

@@ -0,0 +1,164 @@
## 회원가입 역할 승인 개발 계획
### 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 신규 요청 생성
- 지자체관리자 승인 범위 정책 확정