Правила Firestore Путь не работает - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь создать функцию в правилах Firestore, которая проверяет, является ли авторизованный пользователь владельцем документа. Я использовал симулятор для проверки результатов функций, и вот некоторые из тех вещей, которые я пробовал:

return request.auth.uid == 'fePQ2zznGnh7LkDZXonz' && database == '(default)'

возвращает true

resource.data.user is path

возвращает true

return resource.data.user == path('/databases/(default)/documents/users/fePQ2zznGnh7LkDZXonz')

возвращает true

return resource.data.user == path(/databases/$(database)/documents/users/$(request.auth.uid));

возвращает false

return resource.data.user == path(/databases/$(database)/documents/users/$(userId)).bind({"database": database, "userId": request.auth.uid});

возвращает false

Я прочитал их документы о пути, и я не могу найти то, что пропустил: https://firebase.google.com/docs/reference/rules/rules.Path

В симуляторе я вставил следующее

Simulation type: get
location: /servers/6CKqA8ifVsRW3NNww3WF
authentication: true
provider: custom
payload: {
  "uid": "fePQ2zznGnh7LkDZXonz",
  "token": {
    "sub": "",
    "aud": "h4hosting-6f5c8",
    "firebase": {
      "sign_in_provider": "custom"
    }
  }

Я пытаюсь найти, чтобы проверить, совпадает ли uid resource.data.user с request.auth.uid. Тип данных resource.data.user в базе данных firestore является ссылкой на документ со значением users/fePQ2zznGnh7LkDZXonz

Кто-нибудь, кто может указать, что я делаю неправильно?

1 Ответ

0 голосов
/ 05 ноября 2018

Вы пытались написать следующее правило?

return resource.data.user == /databases/$(database)/documents/users/$(request.auth.uid)

Это должно работать, если документ уже сохранен в Firestore.Если вы хотите убедиться, что аутентифицированный пользователь пишет только принадлежащие ему документы, вы должны проверить это в «запросе»:

request.resource.data.user
...