Правило аутентификации Firestore для проверки ссылочного значения в списке - PullRequest
1 голос
/ 20 мая 2019

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

match /teams/{document=**} {
    allow read: if path("/users/" + request.auth.uid) in resource.data.members;
}

Но когда я пытаюсь получить доступ к документу команды, мне сообщают, что произошла ошибка аутентификации.

Каждый член команды имеет свой собственный документ в /users, используя свой UID в качестве ключа.Таким образом, пользователь может быть /users/12345678, а документ команды может иметь:

/teams/team1 {
              members: [/users/12345678, ....]
             }

Где члены являются ссылочными типами.

До сих пор я не смог понять это какПохоже, что в Firestore нет концепции ссылочного типа документа в правилах аутентификации.

Есть предложения?

1 Ответ

0 голосов
/ 20 мая 2019

Правила безопасности имеют концепцию ссылки, и она представлена ​​как объект типа Path .Когда ссылка на документ читается по правилам безопасности, вы должны рассматривать ее как путь.И этот путь будет полностью определен следующим образом:

/databases/$(database)/documents/collection/documentId

Где $ (база данных) берется из вашего обычного совпадения с подстановочными знаками базы данных верхнего уровня.

Итак, ваше правило может быть реализовано так:

match /teams/{document=**} {
    allow read: if /databases/$(database)/documents/collection/users/$(request.auth.uid) in resource.data.members;
}

Обратите внимание, что в правилах безопасности вы можете построить путь, просто начав с /, и использовать $ (foo) для интерполяции переменных в качестве компонентов пути.

...