사용자 화면 문구·표본 데이터 · 퀘스트 참여 흐름 · HOME 진입 구획 · 미니맵 · 공통 확인 창 배치 수정

This commit is contained in:
Sn-Kinos
2026-10-05 00:44:39 +09:00
parent c8d29d032b
commit 8a0297eb92
66 changed files with 1812 additions and 959 deletions
+10
View File
@@ -26,6 +26,12 @@ service cloud.firestore {
// ───────────────────────── 공통 헬퍼 ─────────────────────────
function signedIn() { return request.auth != null; }
// `{questId}_{uid}` 꼴 문서 ID 가 호출자 본인 것인가(뒤가 `_` + uid).
function isOwnSubmissionId(id) {
let tail = '_' + request.auth.uid;
return id.size() > tail.size() && id[id.size() - tail.size():id.size()] == tail;
}
function isSelf(u) { return signedIn() && request.auth.uid == u; }
function role() { return signedIn() ? request.auth.token.get('role', '') : ''; }
function isViewer() { return role() == 'master' || role() == 'ops' || role() == 'viewer'; }
@@ -489,6 +495,10 @@ service cloud.firestore {
allow read: if signedIn() && (resource.data.uid == request.auth.uid
|| resource.data.questAuthorUid == request.auth.uid
|| isOps());
// 자기 제출 건은 문서 ID(`{questId}_{uid}` — fn-quest-submit)로 **없어도** 조회한다.
// 없는 문서는 resource 가 null 이라 위 조건이 거부되고, 앱의 퀘스트 목록이 UGC 퀘스트
// 하나 때문에 통째로 실패했다(2026-10-04 실기기).
allow get: if signedIn() && isOwnSubmissionId(submissionId);
allow write: if false;
}