#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