Функция Cloud-Firestore для остановки изменений в коллекции / документе после достижения ограниченного числа? - PullRequest
0 голосов
/ 26 января 2020

Есть ли способ остановить запись в документ, если количество документов в другой коллекции достигло определенного числа? Имейте в виду параллелизм - несколько пользователей пишут одновременно!

Ответы [ 2 ]

0 голосов
/ 26 января 2020

Вы можете предотвратить запись в этот документ, используя Правила безопасности Firebase на стороне сервера , которые автоматически применяются для записи из любого клиентского SDK.

Если, например, у вас есть документ с число, которое должно быть больше 0, чтобы иметь возможность писать новый документ, вы можете применить это с помощью:

service cloud.firestore {
  match /databases/{database}/documents {
    match /orders/{order} {
      // Only allow an order for a product of there's any stock left
      allow create: 
        if get(/databases/$(database)/documents/products/$(request.resource.data.productid)).data.stock > 0
    }
  }
}
0 голосов
/ 26 января 2020

Конечно:

  1. Пусть запись в Firestore происходит в облачной функции (вызываемой или https)

  2. В функции есть if пункт, который проверяет количество документов до написания

  3. Вам также нужно будет сделать логи проверки c того, имеет ли пользователь разрешение на запись в этой функции, а не через правило Firestore.

Что касается фактического подсчета количества документов, наилучший метод будет зависеть от того, сколько их существует и как быстро они пишутся. Этот поток SO решает следующие проблемы: Количество сборов в облачном хранилище файлов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...