Иногда мы не хотим показывать конечному пользователю весь документ. Например - скажем, у нас есть коллекция users
, и у каждого user
есть свойство email
. Последнее, что мы хотим сделать, это отобразить электронные письма пользователей друг другу.
Таким образом, в RTDB это было просто , поскольку оно не структурировано как коллекция / документ.
В Cloud Firestore это не так просто, как RTDB. Вы не можете фильтровать документ в соответствии с вашими потребностями, как указано в их документах :
При написании запросов для получения документов имейте в виду, что правила безопасности не являются фильтрами - запросы - это все или ничего.
Итак, я подумал о 2 альтернативах:
1. Разделите коллекцию user
на вложенные коллекции public
и private
.
- Плюсы - Вы можете иметь различные правила для
public
и private
. Другими словами - вы можете запретить другим пользователям просматривать private
документ другого пользователя.
- Минусы - Когда вы просто хотите получить весь документ пользователя, вам нужно будет сделать 2 чтения вместо одного, а затем объединить их ответ (при условии, что вы не получите никаких ошибок ).
2. Управлять фильтрацией пользователя в бэкэнде (используя Admin SDK).
- Плюсы - Таким образом, я читаю только один документ, и мне не нужно разбивать свой документ на объекты.
- Минусы - Я не нашел способа подписаться на желаемую облачную функцию (хочу прослушать изменения).
Я знаю, что нет единого пути для достижения определенных целей, но я хотел бы знать, есть ли более традиционный подход к достижению того, что я пытаюсь сделать.