Я пытаюсь создать правило firestore, которое будет проверять, является ли пользователь владельцем «родительской» коллекции.
У меня такая структура:
collection of -> [Diets]
document -> (owner : "owner")
|
subCollection -> [Food]
document -> (name : "Carrot")
Я хотел бы иметь возможность читать и писать документы в подколлекции [Food], используя свойства do c документа [Diet].
Эта версия работает, но она проверяет только запрошенный источник, он не всегда проверяет [Diet].
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents{
match /diets/{id}/{id2=**} {
allow read, write: if resource.data.owner == request.auth.uid;
}
}
}
Эта версия не будет работать, даже если родитель (сама Diet do c) является запрошенный источник. Разве это решение не должно быть таким же, как и предыдущее при проверке DO C внутри диет?
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents{
match /diets/{id}/{id2=**} {
allow read, write: if get(/databases/$(database)/documents/diets/$(id)).data.owner == request.auth.uid;
}
}
}
Разве это решение не должно работать так же, как предыдущее, при проверке Документ диеты?
Он работает в симуляторе, и все выглядит нормально, даже при запросе документов субколлекций, но я получил «FirebaseError: Отсутствуют или недостаточные разрешения» ошибка в моем app.
Это код моего приложения.
firebase.firestore().collection("diets").where("owner", "==", this.userID).get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc);
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});