# 가족사 테넌트 가입 및 관리 정책 (인증 기반 수정안) 이 문서는 보안 강화를 위해 **이메일 인증 성공 시에만 가족사 소속을 선택**할 수 있도록 변경된 가입 흐름을 설명합니다. ## 회원가입 및 권한 관리 흐름도 ```mermaid graph TD %% 시작점 A([사용자 회원가입 시작]) --> B[이메일 입력 및 인증 코드 발송] B --> C{이메일 인증 성공?} C -- No --> B C -- Yes --> D{인증된 이메일이
내부/가족사 도메인인가?} %% 일반 도메인 (gmail, naver 등) D -- No
(External) --> E[개인 테넌트 자동 할당
Type: PERSONAL] E --> J %% 내부 도메인 (hanmaceng.co.kr 등) D -- Yes
(Internal) --> F[가족사 목록 노출 및 선택
Select Company Code] F --> G{선택한 코드가
ACTIVE 상태인가?} G -- No --> F G -- Yes --> J[Ory Kratos 계정 생성] %% 유저 생성 및 권한 할당 J --> K[(Backend read model 레코드 생성)] K --> N[기본 권한 할당: user
Keto: members 부여] N --> O([회원가입 완료]) %% 관리자 수동 개입 (별도 흐름) P((최고 관리자
Super Admin)) -.-> Q[사용자 역할 변경
user -> tenant_admin] Q -.-> R[(Keto 권한 수동 할당
owners, admins 부여)] %% 스타일링 classDef process fill:#e1f5fe,stroke:#01579b,stroke-width:2px; classDef decision fill:#fff3e0,stroke:#e65100,stroke-width:2px; classDef db fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px; classDef startend fill:#f3e5f5,stroke:#4a148c,stroke-width:2px; classDef admin fill:#f5f5f5,stroke:#616161,stroke-width:2px,stroke-dasharray: 5 5; class A,O startend; class B,F,J,N,Q process; class C,D,G decision; class E,K,R db; class P admin; ``` ## 핵심 정책 변경 사항 1. **선(先)인증 후(後)선택:** 사용자는 이메일 소유권 인증(OTP 또는 인증 링크)을 완료하기 전까지는 어떠한 가족사 소속도 선택할 수 없습니다. 2. **도메인 기반 노출 제어:** - 인증된 이메일 도메인이 시스템에 등록된 가족사 도메인(`hanmaceng.co.kr` 등)일 경우에만 소속 선택 UI가 활성화됩니다. - 일반 외부 도메인(gmail, naver 등)은 `PERSONAL` 테넌트로 강제 배정되어 가족사 리스트 자체가 노출되지 않습니다. 3. **이메일 도메인 중복 방지:** 같은 도메인을 쓰더라도 다른 소속일 수 있는 경우(예: 협력사 등)를 대비하여, 인증 성공 후에도 사용자가 직접 본인의 정확한 소속(`Company Code`)을 선택하게 하여 데이터 무결성을 확보합니다. 4. **수동 권한 위임 유지:** 모든 가입자는 기본적으로 `user` 권한을 부여받으며, 테넌트 관리자(`tenant_admin`)나 오너(`owner`) 권한은 지주사 관리자가 사용자의 신원을 최종 확인한 후 수동으로 부여합니다. 5. **실시간 상태 검증:** 가입 시점에 선택한 테넌트가 `ACTIVE` 상태가 아닐 경우 가입 진행을 차단합니다.