Firestore;моделирование правил безопасности проходит, но на самом деле не работает (uid в качестве ключа карты) - PullRequest
0 голосов
/ 13 сентября 2018

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

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

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

1 Ответ

0 голосов
/ 18 сентября 2018

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

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

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

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

...