# InsuWiki 검토+신뢰도 Phase 1 Week 1: 인증 + Custom Claims

## 한정승인

## PRD 참조 (필수 읽기)
1. 통합 체크리스트: `/home/jay/workspace/memory/plans/insuwiki/review-trust-system/checklist.md` — Phase 1 Week 1 섹션
2. 계획서: `/home/jay/workspace/memory/plans/insuwiki/review-trust-system/plan.md`
3. 맥락노트: `/home/jay/workspace/memory/plans/insuwiki/review-trust-system/context-notes.md`
4. InsuWiki 앱: `/home/jay/projects/insuwiki/`
5. Firestore 타입: `/home/jay/projects/insuwiki/nextapp/src/types/firestore.ts`

## Week 1 작업 범위

### SEC-02 즉시 패치 (CRITICAL)
- /api/ai/search-wiki에 verifyMember 미들웨어 추가
- /api/ai/index-wiki에 verifyAdmin 미들웨어 추가
- /api/ai/invalidate-cache의 Bearer 존재 확인 → verifyIdToken()으로 교체

### UserRole 확장 + 타입 단일 소스화
- shared/types/roles.ts 생성 (UserRole = 'admin' | 'reviewer' | 'member' | 'guest')
- firestore.ts의 UserRole 정의 → shared/types/roles.ts import로 교체
- AuthContext.tsx의 UserRole 정의 → shared/types/roles.ts import로 교체
- ROLE_HIERARCHY 상수 정의 (admin=3, reviewer=2, member=1, guest=0)
- permissions 배열 기반 확장 설계

### Custom Claims 세팅
- Claims 발급 Cloud Function 작성 (setCustomClaims)
- 기존 유저 전원 Claims 백필 스크립트
- 프론트엔드 토큰 갱신 처리 (getIdToken(true) 호출 시점)
- Day 3 체크포인트: Claims 발급 CF 동작 확인

### Security Rules 기본 불변식
- Rules에 reviewer 역할 인식 추가 (request.auth.token.role)
- documents 컬렉션: status/reliabilityScores/verificationStatus 필드 클라이언트 쓰기 차단
- documents 컬렉션: approved 상태로의 직접 전이 차단 (CF/Admin SDK만 가능)
- role/permissions 필드 클라이언트 쓰기 차단
- Rules 배포 전 에뮬레이터 테스트

## 주의사항
- InsuWiki 앱 코드 수정 시 git worktree 격리 사용
- Firebase 프로젝트 설정: `/home/jay/projects/insuwiki/firebase.json` 확인
- 기존 인증 코드: `/home/jay/projects/insuwiki/nextapp/src/contexts/AuthContext.tsx` 확인
- Cloud Functions 디렉토리: `/home/jay/projects/insuwiki/functions/`

## 테스트
- SEC-02: 3개 API 인증 없이 호출 → 401 응답 확인
- Custom Claims: 발급 CF 호출 → 토큰에 role claim 포함 확인
- Security Rules: 에뮬레이터에서 4역할 × 주요 필드 접근 테스트

## 보고서
`/home/jay/workspace/memory/reports/task-{TASK_ID}.md`