Правила безопасности не смогут помочь вам обеспечить это. Кроме того, то, что вы пытаетесь сделать, не очень подходит для Firestore, и я тоже это обсудю.
Единственный способ проверить содержимое любого другого документа в правилах безопасности - это Вызовите get () или существующие () , и вы можете вызывать его только до 10 раз за оценку правила. Поэтому, как только вы получите более 10 документов, вы не сможете проверить достаточно документов для обеспечения нумерации идентификаторов документов.
Кроме того, Firestore не очень подходит для использования последовательных документов. Идентификаторы в массовом масштабе, на котором он предназначен работать. Предпочтительный подход заключается в создании случайных идентификаторов документов с помощью add () на клиенте. Если вам нужно наложить какой-либо порядок на этот документ, вы должны использовать для этого значение поля документа или иметь другой документ с массивом, который определяет порядок.
Если по какой-то причине у вас есть жесткие требования чтобы иметь строго последовательные идентификаторы документов, вы можете переосмыслить, зачем вам это нужно в базе данных типа No SQL. Это просто не масштабируемая ситуация, которую Firestore собирается решить.
Также ничего не стоит, чтобы правило allow create
никогда не срабатывало, если документ уже существует. Как только документ существует, клиент может только обновить или удалить его. Если вы хотите запретить клиенту обновлять уже существующий документ, вам просто нужно убедиться, что нет правила allow write
или allow update
, позволяющего выполнить это обновление.