Files
jongryangje/docs/기본 개발계획/28-회원가입_역할승인_개발계획.md
2026-04-08 00:23:55 +09:00

4.5 KiB

회원가입 역할 승인 개발 계획

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_requestpending 레코드 생성
  • 회원 레벨은 즉시 활성화하지 않도록 정책 적용
    • 방법 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 신규 요청 생성
  • 지자체관리자 승인 범위 정책 확정