В Firestore вступают ли в силу правила безопасности до обновления снимка коллекции? - PullRequest
0 голосов
/ 30 апреля 2020

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

Мое правило выглядит следующим образом

match /arenas/{arenaId}/channels/{channelId} {
  allow read :  if (request.auth.uid in resource.data.members);
}

Мой слушатель настроен так:

ref
    .collection("channels")
    .where("members", "array-contains", uid)
    .onSnapshot(snapshot => {

Когда я беру id из members для определенного c канала, выражение where больше не сохраняется для этого конкретного канала. Вместо обновления, уведомляющего меня о том, что канал удален, я получаю исключение.

Это ожидаемое поведение или я делаю ошибку?

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

1 Ответ

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

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

Я не могу рекомендовать «правильную» реализацию, так как вам придется самим решить, что делать, если слушатель терпит неудачу. Возможно, вы сможете повторить запрос после исправления списка UID.

...