Пожарный магазин; имитация правил безопасности проходит, но фактически не выполняется (uid как ключ карты)

Я не могу понять, почему это правило безопасности 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"));
    }
  }
}

Вот данные:

enter image description here

Если 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 было создано после того, как я начал использовать правила.

Может ли это быть вещь?

Спасибо за вашу помощь

4
0
358
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После обращения в службу поддержки Firebase мне сказали, что в контексте запросов правила безопасности должны соответствовать самому запросу.

То есть; если я хочу запрашивать документы с фильтрами по fieldA и fieldB, тогда только fieldA и fieldB должны быть в правиле безопасности.

Однако это не то, чего я хочу здесь достичь.

Надеюсь, что это поможет любому, у кого есть такая же проблема.

Отличный совет, мой друг. Я думаю, ты только что спас мне дни от досадной боли. Не могли бы вы уточнить подробности? может быть, отправьте ссылку, которая подробно объясняет эту концепцию?

Shy Agam 07.09.2019 10:14

это может помочь firebase.google.com/docs/firestore/security/…

landnbloc 18.05.2020 17:58

Другие вопросы по теме