Можно ли добавить слой в Firestore, чтобы изменения не были зафиксированы напрямую? - PullRequest
1 голос
/ 01 мая 2019

Как гласит мой заголовок, возможно ли добавить новый слой над базой данных Cloud Firestore, чтобы все сделанные пользователями изменения не фиксировались непосредственно в базе данных?

1 Ответ

2 голосов
/ 02 мая 2019

Для этого есть 2 шаблона, которые поддерживают работу «Бэкэнд как сервис» и не требуют установки чего-то вроде выделенной виртуальной машины или кластера Kubernetes; помните, что вы всегда можете использовать Cloud Firestore как обычную базу данных документов.

Очереди косвенной записи

Используя правила безопасности, разрешите только создание новых документов в коллекцию с именем write_queue и никому другому:

match /write_queue/{doc} {
  allow create: if true;
}

В этой коллекции настройте облачную функцию для запуска при создании:

exports.myFunctionName = functions.firestore
    .document('write_queue/{writeId}').onCreate((document, context) => {
      // ... Your code here
    });

Затем эта функция может принимать эту косвенную запись от пользователя и выполнять любую обработку, которую вы хотите, и, наконец, записывать ее в фактическую коллекцию, для которой она предназначалась в базе данных.

Запись через облачную функцию

Вместо того, чтобы разрешать пользователям писать в базу данных, настройте правила безопасности, чтобы она была доступна только для чтения. Используйте HTTP Cloud Functions в качестве конечной точки, в которую пользователи отправляют любые записи вместо прямой записи в базу данных. Эта облачная функция будет выполнять любую обработку, которую вы захотите, и, наконец, записать ее в фактическую коллекцию, для которой она предназначалась в базе данных.

...