Cloud Firestore Правила для локации - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь заблокировать чтение в пожарном хранилище для любых записей, которые не находятся в радиусе 1000 м от текущей позиции пользователя, используя rules.latlng.distance

enter image description here

Я пробовал несколько случаев:

  1. Правило
latlng.value(resource.data.location.latitude, resource.data.location.longitude).distance(get(/databases/$(database)/documents/users/$(request.auth.uid)).data.location) <= 1000;

Ошибка

Широта свойства не определена в объект.

Правило
latlng.value(resource.data.location.getLatitude(), resource.data.location.getLongitude()).distance(get(/databases/$(database)/documents/users/$(request.auth.uid)).data.location) <= 1000;

Ошибка

Функция не найдена Ошибка: Имя: [getLatitude].

Правило
latlng.value(resource.data.location.latitude(), resource.data.location.longitude()).distance(get(/databases/$(database)/documents/users/$(request.auth.uid)).data.location) <= 1000;

Ошибка

Ошибка функции не найдена: Имя: [широта].

Все они являются результатом в ошибке. Поле местоположения имеет тип GeoPoint.

1 Ответ

0 голосов
/ 23 февраля 2020

Вы не можете создать LatLng объект в правилах безопасности. Но если у вас уже есть GeoPoint в вашем документе, вы можете просто получить доступ к этому полю, и это будет уже LatLng объект.

Так что, насколько я вижу, это должно быть что-то вроде этого:

resource.data.location.distance(
  get(/databases/$(database)/documents/users/$(request.auth.uid)).data.location
) <= 1000;
...