Требуется ли {path = **} для запросов группы сбора? - PullRequest
0 голосов
/ 08 мая 2019

Я прочитал документацию запроса к группе коллекций , и мне было интересно, является ли рекурсивный подстановочный знак (rules_version = '2') {path=**} обязательным для работы запросов группы сбора.

Я приведу вам пример (следуя примеру из документации):

  • База данных использует forums коллекций с различными форумами.

  • Каждый форум может иметь несколько posts.

  • В результате получается следующая структура: forums/{forum}/posts/{post}.

Оба следующих фрагмента будут успешно соответствовать всем сообщениям:

match /forums/{forum}/posts/{post} {
  allow list;
}

match /{path=**}/posts/{post} {
  allow list;
}

Если я правильно понимаю документацию, первого match будет не достаточно для запроса группы сбора наposts на работу.
Я понимаю, что второй match будет также соответствовать любому другому подколлекцию с именем posts.

Является лиfirst match достаточно?
Если нет, всегда ли рекурсивный подстановочный знак {path=**}должны быть на высшем уровне, то есть прямо в match /databases/{database}/documents?Из документации видно, что это было так.

1 Ответ

1 голос
/ 08 мая 2019

Документация предполагает, что ваше первое правило недостаточно , чтобы разрешить запрос группы сбора на сообщения.

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

match /{path=**}/posts/{post} {
  allow read: if request.auth.uid != null;
}

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

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

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

...