Правила управления пользователями Firebase и уровня безопасности доступа (массив-содержит-любой и в операторах) - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть пользовательские доступы, хранящиеся в массиве объектов для учетных записей моих учетных документов / {accountId}

access: [
{uid:"xyz123",level:"admin"}
{uid:"xyz456",level:"view"}
]

Можно ли настроить правило пожарного депо с оператором in, чтобы проверить, совпадает ли идентификатор пользователя, запрашивающий данные один из объектов в этом массиве доступа.

Это работает в симуляторе, но в живом приложении мне отказывают в разрешениях

match /accounts/{document=**} {
      allow read: if {"level":"owner", "uid":request.auth.uid} in resource.data.access;
      allow read: if {"level":"view", "uid":request.auth.uid} in resource.data.access;
      allow read: if {"level":"edit", "uid":request.auth.uid} in resource.data.access; 
      allow read: if {"level":"restricted", "uid":request.auth.uid} in resource.data.access; 

    }

Я хочу сохранить доступ к документам, так как они должны быть основаны на документах.

1 Ответ

0 голосов
/ 02 мая 2020

Выше работает нормально. Мне не хватало проверки уровня администратора в правилах безопасности, в то время как в моем обращении к базе данных у меня был массив содержит любой с этим массивом

[{"level":"owner", uid},{"level":"admin", uid},{"level":"view", uid},{"level":"edit", uid}]

Вот правила

allow read: if {"level":"owner", "uid":request.auth.uid} in resource.data.access;
      allow read: if {"level":"admin", "uid":request.auth.uid} in resource.data.access;
      allow read: if {"level":"view", "uid":request.auth.uid} in resource.data.access;
      allow read: if {"level":"edit", "uid":request.auth.uid} in resource.data.access; 
      allow read: if {"level":"restricted", "uid":request.auth.uid} in resource.data.access; 

Что бы вы ни указали в запросе пожарного депо, оно должно быть защищено вашими правилами безопасности.

...