Как ограничить создание документов на основе поля в другой коллекции?

#firebase #google-cloud-firestore #firebase-security

#firebase #google-облако-firestore #firebase-безопасность

Вопрос:

Я пытаюсь ограничить создание документов на основе поля в другой коллекции, основная проблема заключается в том, когда клиент одновременно создает документ с другим клиентом, если, например, в поле CollectionA есть поле с именем maxCreationOfDocuments: 2 Я хочу, чтобы в CollectionB было только 2 документа, таким образом, если 3 или больше клиентов одновременно создают документ в CollectionB, я не хочу, чтобы в еще три клиента создадут документ на основе поля CollectionA maxCreationOfDocuments: 2. Я пытался создать правило firestore, но не работает.

 match /squash/{squadId} {
  match /joined/{joinedId} {
   allow create: if request.query.limit <= 
 /databases/$(database)/documents/squash/{squadId}.data.maxUserJoined;
  }
}
  

Комментарии:

1. «основная проблема заключается в том, что клиент одновременно присоединяется к другому клиенту» . Мне не совсем понятно, что вы под этим подразумеваете. Кроме того, вы должны знать, что request.query.limit это относится только к запросам списка, а не к записям.

2. Извините, я имел в виду, что основная проблема заключается в том, что клиент одновременно создает документ с другим клиентом

3. Мне все еще не ясно. Возможно, вы могли бы отредактировать вопрос, чтобы более подробно проиллюстрировать проблему. Какие запросы выполняют клиенты, которые необходимо контролировать?

4. Я отредактировал вопрос, только хочу ограничить создание документов в CollectionB на основе поля в CollectionA , называемого maxCreationOfDocuments: 2, я не хочу выполнять какой-либо запрос.

5. Это будет сложно. Вы не можете подсчитать количество документов в коллекции в правилах безопасности, поэтому вам нужно будет вести подсчет где-то в другом месте и сравнивать с этим количеством. Поддерживать количество документов нетривиально.