Переменная в операторе сопоставления не работает должным образом - PullRequest
0 голосов
/ 29 января 2019

Этот код дает мне разрешение (PERMISSION_DENIED), если я пытаюсь запросить документ

match /tasks/{task}{
  allow read, write: if task in get(/databases/$(database)/documents/users/$(request.auth.uid)).data.members;
}

, и, если я попробую следующий код, он будет работать

match /tasks/{task}{
  allow read, write: if "1jKpWhAqIzY0TspshKao" in get(/databases/$(database)/documents/users/$(request.auth.uid)).data.members;
}

строка "1jKpWhAqIzY0TspshKao"это имя / идентификатор документа

/ tasks / {taskid}

{
  owner: "4v8Bz4dsvtg4jG3l8nih71MRwy49",
  taskId: "1jKpWhAqIzY0TspshKao",
  title: "Some task"
}

/ users / {userid}

{
  email: "email@gmail.com",
  members: {
    "1jKpWhAqIzY0TspshKao", "EKwNgHukewtachrTfDMk" ...
  }
  username: "name"
}

Я использовал следующий код для запроса документа для обоих правил

db.collection("tasks").get().addOnSuccessListener { querySnapshot ->
  ...
}

что не так с этим первым кодом?

1 Ответ

0 голосов
/ 29 января 2019

Ваш код пытается получить все задачи из коллекции tasks.Но, похоже, вы намерены, чтобы ваше правило безопасности отфильтровывало задачи на основе оценки правил.Это не так, как работают правила безопасности.Из документации :

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

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

...