Запросы группы коллекций отклоняются правилами Firebase - PullRequest
1 голос
/ 21 июня 2019

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

match /projects/{projectID} {
  allow read, delete, update: if request.auth.uid == resource.data.createdBy;
  allow create: if request.auth != null;
}

match /users/{userID} {
    allow read, delete, update: if request.auth.uid == userID;
  allow create: if request.auth != null;
}

match /projects/{projectID}/tasks/{taskID} {
  allow read, delete, update: if request.auth.uid == resource.data.createdBy;
  allow create: if request.auth != null;
}

вот мой запрос группы сбора

_firestore
    .collectionGroup('tasks')
    .where('dueDate', isEqualTo: DateTimeHelper.today)
    .where('createdBy', isEqualTo: user.id)
    .snapshots()
    .map((list) => list.documents.map((doc) {
          String projectId = doc.reference.parent().parent().documentID;
          String taskId = doc.documentID;
          return Task.fromDocument(doc, taskId, projectId);
        }).toList());

1 Ответ

1 голос
/ 21 июня 2019

Ни одно из ваших правил не применяется к запросам группы сбора.Вам следует ознакомиться с документацией по правилам для групп сбора .С этой страницы:

В ваших правилах безопасности вы должны явно разрешить запросы групп сбора, написав правило для группы сбора:

  1. Убедитесь, что rules_version = '2';это первая строка вашего набора правил.Для запросов группы сбора требуется новый рекурсивный подстановочный знак {name = **} правил безопасности версии 2.
  2. Напишите правило для вашей группы сбора, используя match / {path = **} / [COLLECTION_ID] / {doc}.

Таким образом, ваше правило будет выглядеть примерно так:

rules_version = '2';  // at the very top of your rules

match /{path=**}/tasks/{taskID} {
  allow read, delete, update: if request.auth.uid == resource.data.createdBy;
  allow create: if request.auth != null;
}
...