У меня проблема с правилами Firestore, когда разрешение хранится в другом документе в другой коллекции.Я не смог найти никаких примеров этого, но я читал, что это можно сделать.
Я хочу сделать это таким образом, чтобы избежать необходимости делать много записей, когда ученик делится своим списком домашних заданий со многими другими учениками.Да, я знаю, что это считается еще одним чтением.
У меня есть 3 коллекции, пользователи, разрешения и домашняя работа вместе с некоторыми примерами данных.
пользователи
{
id: fK3ddutEpD2qQqRMXNW,
name: "Steven Smith"
},
{
id: YI2Fx656kkkk25,
name: "Becky Kinsley"
},
{
id: CAFDSDFR244bb,
name: "Tonya Benz"
}
разрешения
{
id: fK3ddutEpD2qQqRMXNW,
followers: [YI2Fx656kkkk25,CAFDSDFR244bb]
}
домашняя работа
{
id: adfsajkfsk4444,
owner: fK3ddutEpD2qQqRMXNW,
name: "Math Homework",
isDone: false
}
Начало правил моего пожарного магазина:
service cloud.firestore {
//lock down the entire firestore then open rules up.
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
match /homework/{ } {
allow get: if isSignedIn()
}
// helper functions
function isSignedIn() {
return request.auth != null;
}
function isUser(userId) {
return request.auth.uid == userId;
}
function isOwner(userId) {
return request.auth.uid == resource.data.uid;
}
}
}
Вариант использования:
Стивен Смит поделился своим списком домашних заданий с Тоней Бенц,
Тоня Бенц вошла в приложение, чтобы просмотреть домашнюю работу подруги Стивена.Приложение выполняет этот запрос, чтобы получить список домашних заданий Стивена Смита.
var homeworkRef = db.collection("homework");
var query = homeworkRef.where("owner", "==", "fK3ddutEpD2qQqRMXNW");
Вопрос:
Какое правильное правило соответствия Firestore берет поле «владелец» из коллекции домашних заданий, чтобы найти его в качестве идентификатора в коллекции разрешенийкогда пользователь Tonya Benz вошел в систему, чтобы этот запрос мог выполняться.