Я не могу понять, почему это правило безопасности Firestore не работает в сети.
Я использую @ angular / fire latest с запросом к коллекции и с firebase latest, но он работает в симуляции.
service cloud.firestore {
match /databases/{database}/documents {
// Match any document in the 'cities' collection
match /events/{event} {
allow read: if (resource.data.access.code == 'public' || (resource.data.access.code == 'protected' && resource.data.objname.objfield == "A"));
}
}
}
Вот данные:
Если access.code "защищен", тогда мы смотрим на objname.objfield == "A".
Проверка access.code == "protected" позволяет мне получить доступ к данным, а вторая часть objname.objfield == "A" - нет.
Я не понимаю, почему.
Я убедился, что это свойство существует во всех объектах коллекции. ( Правила безопасности Firestore на основе значений карты )
Я пробовал несколько разных способов, все они проходят в Simulation, потому что это запрос одного документа.
Фактический запрос на уровне коллекции не проходит через разрешения для реального веб-вызова.
Это мой запрос, который проходит, когда нет правила безопасности
const pathAccessCode: firebase.firestore.FieldPath = new firebase.firestore.FieldPath('access', 'code');
const eventsUser: AngularFirestoreCollection<any> = this.firestore.collection('events', ref => ref.where(pathAccessCode, '==', 'protected'));
const eventsUser$: Observable<any> = eventsUser.valueChanges();
eventsUser$.subscribe(data => console.log(data) );
Как видите; некоторые свойства распознаются правилом (access.code), но не другие (objname.objfield).
Единственное, о чем я могу думать на этом этапе, это то, что access.code был создан до того, как я начал играть по правилам .
Однако objname.objfield было создано после того, как я начал использовать правила.
Может ли это быть вещью?
Спасибо за вашу помощь