Предотвращение дублирования записей в правилах Firestore не работает

def bubble_sort(a):
    t = 0
    sorted = False # sorted = False because we have not began to sort
    while not sorted:
    sorted = True # Assume sorted = True first, it will switch only there is any change
        for key in range(1,len(a)):
            if a[key-1] > a[key]:
                sorted = False
                t = a[key-1]; a[key-1] = a[key]; a[key] = t;
    print a
0
задан Frank van Puffelen 17 January 2019 в 14:45
поделиться

1 ответ

Ваше правило 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});

Также см .:

0
ответ дан Frank van Puffelen 17 January 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: