Невозможно сделать запрос в правилах Firestore, используя утверждения - PullRequest
0 голосов
/ 07 апреля 2020

В моих правилах firestore это позволяет мне запрашивать список всех "организаций" пользователя:

match /organizations/{orgId}{
  allow read: if request.auth.uid in resource.data.members;
}

Где members - это массив идентификаторов пользователей.

Но, если я изменю это для работы с утверждениями:

match /organizations/{orgId}{
  allow read: if orgId in request.auth.token.organizations;
}

Где организации - это список идентификаторов организации.

Кажется, что работает с:

match /organizations/{orgId}{
  allow read: if request.auth.token.organizations[orgId] == true;
}

Это будет позвольте мне получить доступ к документу, но не к списку документов. Есть ли способ обойти это?

1 Ответ

0 голосов
/ 07 апреля 2020

Это не работает, потому что правила безопасности не являются фильтрами . (Обязательно прочитайте документы по этой ссылке.) Также читайте подробнее здесь .

Когда вы выполняете запрос к коллекции (ни один документ не получает), фильтры в запросе должны абсолютно соответствовать требованиям правил, прежде чем станет известно содержание каких-либо документов. Правила безопасности не удаляют отдельные документы из результатов. В этом отношении запросы Firestore - это «все или ничего» - либо известно, что все запрошенные документы совпадают заранее, либо весь запрос завершается неудачей.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...