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

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

Могу ли я настроить правило firestore с помощью оператора 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; 

    }

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

0
findev 30 Апр 2020 в 08:18

1 ответ

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

[{"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; 

Все, что вы указываете в запросе firestore, должно подпадать под ваши правила безопасности.

0
findev 2 Май 2020 в 08:58