Нужно ли делать получение для каждого поля документа, к которому я хочу получить доступ - PullRequest
0 голосов
/ 09 сентября 2018

Я вижу, что для получения поля документа в правилах безопасности нужно использовать get. В приведенном ниже примере показано получение поля 'admin' для некоторого документа в коллекции пользователей. Если бы я хотел получить другое поле, мне нужно было бы сделать еще один запрос на получение или я мог бы просто сделать один запрос на получение и получить все необходимые мне поля в документе.

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

https://firebase.google.com/docs/firestore/security/rules-conditions

service cloud.firestore {
      match /databases/{database}/documents {
        match /cities/{city} {
          // Make sure a 'users' document exists for the requesting user before
          // allowing any writes to the 'cities' collection
          allow create: if exists(/databases/$(database)/documents/users/$(request.auth.uid))

          // Allow the user to delete cities if their user document has the
          // 'admin' field set to 'true'
          allow delete: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true
        }
      }
    }

1 Ответ

0 голосов
/ 09 сентября 2018

Да, вам придется написать еще один get (). В правилах безопасности Firestore нет переменных, поэтому вы не можете хранить содержимое get () для многократного использования его данных.

Множественное получение доступа к одному и тому же документу может не повлечь за собой многократные расходы на чтение В документации говорится:

Некоторые вызовы для доступа к документу могут кэшироваться, и кэшированные вызовы не учитываются при ограничении.

...