Firestore 데이터베이스가 있고 이제 새 컬렉션을 추가해야합니다.
이 컬렉션의 각 항목에는 다음이 포함되어야합니다.
나는 현재 첫 단계에 불과하며 이미 어려움을 겪고 있습니다.
내 컬렉션 (/ trips /)을 쿼리하고 액세스 할 수있는 항목 만 가져올 수 있기를 바랐지만 오류가 발생합니다.
FirebaseError: Missing or insufficient permissions.
다음은 내 규칙 파일입니다.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
match /users/{userId} {
allow read, update, delete: if request.auth != null && request.auth.uid == userId;
allow create: if request.auth != null;
}
match /trips/{trip} {
allow read, update, delete: if request.auth != null && request.auth.uid == resource.data.admin;
allow create: if request.auth != null;
}
}
}
그래서 내 질문 :
당신의 도움을 주셔서 대단히 감사합니다
문서 에서 읽을 수 있듯이 "모든 일치 문 은 컬렉션이 아닌 문서를 가리켜 야합니다 ".
와
service cloud.firestore {
match /databases/{database}/documents {
match /trips {
// ....
}
}
}
문서를 가리 키지 않습니다. 다음과 같이 와일드 카드를 사용하여 지정된 경로에있는 문서를 가리켜 야합니다.
service cloud.firestore {
match /databases/{database}/documents {
match /trips/{trip} {
// ....
}
}
}
따라서 다음은 요구 사항을 올바르게 구현해야합니다.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /trips/{trip} {
allow read: if request.auth != null &&
(request.auth.uid == resource.data.admin
|| request.auth.uid == resource.data.writer
|| request.auth.uid == resource.data.reader
);
allow update: if request.auth != null &&
(request.auth.uid == resource.data.admin
|| request.auth.uid == resource.data.writer
);
allow create: if request.auth != null;
}
}
}
이것이 여러 사람이 액세스해야하는 리소스를 관리하는 올바른 방법입니까 (즉,
userId
여러 사용자가 있으므로 경로에있을 수 없음)
관리자, 작성자 및 독자가 각 문서에 대해 특정한 경우 이것이 올바른 방법입니다. 이러한 역할이 더 글로벌 한 경우 (예 : 동일한 사용자가 모든 유럽 여행을 편집 할 수 있음) 사용자 지정 클레임 과 함께 역할 기반 접근 방식을 사용할 수 있습니다 .
내가 볼 수있는 문서 목록 만 쿼리하려면 어떻게해야합니까?
것이 중요합니다 규칙은 필터하지 않습니다 . 따라서 문서를 가져 오기위한 쿼리는 규칙과 일치해야합니다. 특정 경우에 세 개의 값을 포함하는 Array 유형의 추가 필드를 가질 수 있습니다. 관리자, 작성자 및 독자의 uid 및 array-contains
연산자를 사용합니다 . 다음과 같은 것 :
const user = firebase.auth().currentUser;
const query = db.collection("trips").where("authorizedReaders", "array-contains", user.uid);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다