Ваше правило if request.resource.data.m != resource.data.m
гласит, что поле m
может быть записано, только если оно не совпадает с текущим значением поля m
в том же документе .
Нет способа проверить наличие дубликатов во всей коллекции, так как для этого потребуется Cloud Firestore для чтения всех документов в коллекции (которая не масштабируется).
Единственный способ реализовать ограничение уникальности - создать отдельную коллекцию, в которой вы используете m
в качестве идентификатора документа. Поскольку идентификаторы документов в коллекции по определению уникальны, вы можете применить правило там с помощью:
match /unique_ms/{m} {
allow create;
}
Вышесказанное позволяет только создать документ, но не позволяет его обновить. Это означает, что если кто-то создал документ с определенным значением m
, никто не сможет его перезаписать.
Альтернативой с использованием правила write
может быть:
allow write: if !exists(/databases/$(database)/documents/unique_ms/{m});
Также см .: