Проверить, находится ли auth.id в карте данных ресурса с firestore.rules? - PullRequest
0 голосов
/ 08 июля 2019

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

У меня есть коллекция документов, где "участники" в каждом документе определяются как массив объектов. Я хотел бы разрешить чтение, когда пользовательский auth.uid равен атрибуту userId одного из участвующих объектов.

Мой документ выглядит так в пожарном магазине:
enter image description here

Теперь в моем firestore.rules я хотел бы написать что-то вроде:

if resource.data.participants.find(p => p.userId == request.auth.uid)

... но это невозможно

Есть ли способ поместить это в функцию, которая будет выполнять тот или иной способ обойти это?

br, Симон

Ответы [ 2 ]

1 голос
/ 08 июля 2019

То, что вы ищете, является эквивалентом array-contains в запросе, который равен in в правилах безопасности.Чтобы разрешить такую ​​проверку, вы должны хранить только UID пользователей в массиве:

participantUIDs: ["tJ6Yn...solV2", "hijlD...uXFA2"]

Затем вы можете проверить их в правилах безопасности с помощью:

if request.auth.uid in resource.data.participantUIDs
1 голос
/ 08 июля 2019

Этот тип проверки в настоящее время невозможен для правил безопасности, поскольку в языке нет итерации и нет функций типа map () или filter (), доступных для объектов типа списка.

Вывсегда можете подать запрос функции для последнего (итерация, вероятно, никогда не будет частью языка, но возможны карта списка и фильтр).

...