Защитите и отфильтруйте определенные данные «Ключи» внутри документа FireStore - PullRequest
0 голосов
/ 09 марта 2020

Я занимаюсь разработкой приложения, которое должно выполнять поиск всех близлежащих пользователей, БЕЗ обмена, скажем, их координат в пределах 100 миль. В приведенном ниже примере я использую GeoHa sh, чтобы помочь мне в расчете расстояния.

В FireStore у меня есть следующий документ в коллекции пользователей.

{
   "userId" : "12345",
   "displayName" : "username",
   "geoHash" : "gbsuv",
   "photoUrl" : "example.com/user.jpg",
   "refId" : "0001"
}

Вопрос в том, как мне защитить "geoHa sh" от извлечения внутри каждого документа внутри Коллекция?

1 Ответ

1 голос
/ 09 марта 2020

Правила безопасности Firestore предоставляют доступ на уровне документа. Таким образом, либо пользователь может прочитать весь документ, либо он не может ничего прочитать в этом документе. Нет никакого способа предоставить пользователям доступ только к части документа.

Это означает, что вы не можете запросить что-то, что клиент не может прочитать. Таким образом, в вашей текущей структуре, если пользователю потребуется выполнить запрос на geoHash, он также сможет прочитать это поле.

Единственная альтернатива - не разрешать клиенту выполнять запросы, а вместо этого делать это. запросы к серверу (например, в облачных функциях). Для этого вы должны хранить геоха sh для каждого пользователя в отдельном документе (скажем, в коллекции под названием locations). Облачная функция затем запрашивает эту коллекцию и возвращает пользователю реальные документы пользователя (которые больше не содержат геоху sh).

...