Я работаю над программой Angular, использующей Firestore, здесь у меня есть функция бронирования. Я хочу, чтобы пользователи публично читали и записывали заказы, если в одном из документов имеется reference_no
.
Вот как структурирован мой документ:
Это мои текущие правила безопасности:
service cloud.firestore {
match /databases/{database}/documents {
match /jobs/{job} {
allow read, write: if request.resource.data.property.reference_no == resource.data.property.reference_no;
}
match /{document=**} {
allow read, write: if isSignedInUser();
}
//functions
function isSignedInUser(){
return request.auth.uid != null;
}
}
}
Вот как я обращаюсь к этому:
findByReferenceNo(reference_no): Observable < any > {
return this.afs
.collection(this.jobsCollection, ref => ref.where('property.reference_no', '==', reference_no))
.snapshotChanges()
.pipe(
map((actions) => {
return actions.map((snapshot) => {
const data = snapshot.payload.doc.data();
const id = snapshot.payload.doc.id;
return {
id,
...data
};
});
})
);
}
Но не знаю, почему я получаю: Error: Missing or insufficient permissions.
Примечание. Я не подписываюсь при доступе к этому.
Насколько я знаю, чтобы гарантировать выполнение запросов, правила безопасности Firestore проверяют ваш запрос, а не каждый отдельный документ. Это означает, что запрос разрешен только в том случае, если правила могут подтвердить, что запрос не будет получать больше данных, чем разрешено.
В вашей текущей модели это просто невозможно, потому что это потребует, чтобы правила безопасности проверяли каждый отдельный документ. Для некоторых примеров запросов, которые можно защитить, ознакомьтесь с документацией Firestore по обеспечению запросов.