#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. Это будет сложно. Вы не можете подсчитать количество документов в коллекции в правилах безопасности, поэтому вам нужно будет вести подсчет где-то в другом месте и сравнивать с этим количеством. Поддерживать количество документов нетривиально.