Используя Firebase Firestore в веб-приложении, могу ли я исключить возврат определенных полей?

#javascript #firebase #google-cloud-firestore

#javascript #firebase #google-cloud-firestore

Вопрос:

Я ничего не смог найти в документах, но, скажем, я выполняю запрос, такой как

 const snapshot = await jobsRef.where('status', '==', STATUS_ACTIVE).get();
  

Можно ли исключить возврат определенных полей для этого «задания»?
В документе «задание» есть определенные поля, которые должны оставаться закрытыми.

Ответ №1:

Для веб- и мобильных клиентов невозможно исключить определенные поля из запроса. Когда вы запрашиваете документ, он всегда будет доставлять все поля для всех соответствующих документов. Правила безопасности вам в этом не помогут.

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

 /jobs-public/{id}
/jobs-private/{id}
  

Или вы можете использовать вложенные коллекции:

 /jobs/{id}/public/{id}
/jobs/{id}/private/{id}
  

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

Ответ №2:

Невозможно получить определенные поля, и, как упоминал Дуг выше, вы можете разделить поля в разных коллекциях или вложенных коллекциях.

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

Хотя это, очевидно, увеличит ваши расходы, поскольку вы будете использовать облачные функции. Хотя это действительно эффективно для фильтрации и проверки того, кто извлекает данные.

Комментарии:

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

2. @strangeQuirks да, вы можете использовать вызываемые функции Firebase