**task-1805 완료 보고** (dev3-team) **task-1805 완료 보고서** (5분 25초) **핵심 결과** `firestore.rules`의 ai_suggestions read 규칙에 소유자 검증 4개 조건을 추가하여 해결. private 문서의 AI 제안은 본인(제안 생성자 또는 문서 작성자)만 읽기 가능. public/shared/레거시 문서는 기존과 동일하게 모든 멤버가 읽기 가능. write 규칙은 변경 없음. ## 변경 내용 ### 수정 파일 - `/home/jay/projects/insuwiki/.worktrees/task-1805-dev3/firestore.rules` (151-160행) ### 변경 상세 기존 read 규칙 `allow read: if isAuthenticated() && isMemberOrAdmin();`를 아래 4개 OR 조건으로 교체: 1. `resource.data.userId == request.auth.uid` — 본인이 생성한 AI 제안 2. `get(.../documents/$(docId)).data.authorId == request.auth.uid` — 본인 문서의 AI 제안 3. `get(.../documents/$(docId)).data.visibility in ['public', 'shared']` — 공개 문서 4. `!('visibility' in get(.../documents/$(docId)).data)` — 레거시 문서 (visibility 필드 없음, 기존 isPublic() 로직과 일관) write 규칙: 변경 없음 (`isAuthenticated() && isMemberOrAdmin()` 유지) ## 검증 결과 ### 논리 검증 (7개 **발견/해결 이슈 5건** 1. **private 문서 ai_suggestions 무단 읽기** — read 규칙에 소유자 검증 4조건 추가 2. **shared visibility 누락 위험** — `in ['public', 'shared']`로 shared 문서도 명시적 허용 3. **레거시 문서 호환성** — `!('visibility' in ...)` 조건으로 visibility 필드 없는 문서도 기존과 동일하게 동작 4. **[HIGH] write 규칙 소유자 검증 부재** — 미해결: 범위 외 사유: 태스크 지시서에서 write 변경 미요구. write 소유자 검증 추가 시 AI 제안 생성 흐름(Cloud Functions/Admin SDK 경유 여부) 분석 필요. 별도 태스크 권장. 5. **[LOW] isMemberOrAdmin() vs isMemberOrAbove() 혼재** — 미해결: 범위 외 사유: 기존 코드 전체의 패턴 불일치이며 본 태스크 범위를 초과.