docs: add project docs and test updates
This commit is contained in:
164
docs/기본 개발계획/28-회원가입_역할승인_개발계획.md
Normal file
164
docs/기본 개발계획/28-회원가입_역할승인_개발계획.md
Normal 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 신규 요청 생성
|
||||
- 지자체관리자 승인 범위 정책 확정
|
||||
|
||||
Reference in New Issue
Block a user