Правила безопасности Firebase collectionGroup соответствуют ключу документа - PullRequest
0 голосов
/ 24 октября 2019

У меня есть приложение, использующее Cloud Firestore. Я пытаюсь защитить свою базу данных с помощью правил безопасности Firebase и пытаюсь получить документ, который запрашиваю с помощью запроса группы сбора.

  • Вот мое правило безопасности, передающее эмулятор, но не внутри моего веб-приложения.
match /{path=**}/groups/{groupId} {
  allow read: if resource.data.id == resource.id;
}
  • Если я жестко закодирую свое правило следующим образом:
match /{path=**}/groups/{groupId} {
  allow read: if resource.data.id == "1" <--- hard coding the value to match my DB, this works;
}
  • Вот как язапрос для группы:
this.db
  .collectionGroup('groups')
  .where('id', '==', id)
  .get()
  .then(snapshot => { ... });

Снимок экрана : enter image description here

1 Ответ

0 голосов
/ 24 октября 2019

Я бы не ожидал, что это первое правило сработает в любой ситуации, потому что оно пытается фильтровать документы на основе их содержимого. Правила безопасности не являются фильтрами . Если это работает в симуляторе консоли, это может быть ошибкой в ​​симуляторе. Кроме того, имейте в виду, что симулятор не имитирует запросы, он просто проверяет получение документа.

Второе правило работает, потому что клиентский запрос точно соответствует правилам. Им обоим требуется свойство id документа "1". Поскольку клиент задает фильтр, а фильтр соответствует правилу, все в порядке.

Мне не совсем ясно, что ваше первое правило должно разрешать или отклонять. Похоже, вы хотите, чтобы он разрешал только документы, свойство идентификатора которых совпадает с фактическим идентификатором документа. Но поскольку клиент на самом деле не способен выразить это условие фильтра, правило просто отклоняет запрос каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...