Как получить все документы в собрании, для которого у текущего пользователя есть разрешения на чтение?
Попытка получить всех документов приводит к ошибке разрешений, поскольку включает попыткичитать документы, у которых у пользователя нет прав (вместо того, чтобы возвращать отфильтрованный список документов).
Каждый пользователь в этом приложении может принадлежать нескольким группам.Чтения заблокированы для групп, в которые они были добавлены.
match groups/{group} {
allow read: if exists(/databases/$(database)/documents/groups/$(group)/users/$(request.auth.uid));
}
Вот как это будет выглядеть с гипотетическим оператором subcollection-contains-id
.
firestore()
.collection("groups")
.where("users", "subcollection-contains-id", user.uid);
В качестве временного обходного пути Iпереместил эту логику в облачную функцию.Вот краткое описание того, как это работает.
for (let group of firestore().collection("groups")) {
let user = firestore.doc(`groups/${group.id}/users/${uid}`);
if (user.exists) {
// Send this group id to the client
}
}
Как я могу объединить эти проблемы и перенести эту логику на сторону клиента, не ослабляя правила безопасности?