# #javascript #firebase #react-native #google-cloud-firestore
Вопрос:
правила, которые я установил, разрешают чтение: если resource.data.uid == request.auth.uid;
как я это называю, это так
return async (dispatch) => {
await firebase
.firestore()
.collection("patients")
.doc(firebase.auth().currentUser.uid)
.collection("patient")
.orderBy("creation", "desc")
.get()
.then((result) => {
let Patients = result.docs.map((doc) => {
const data = doc.data();
const id = doc.id;
return { id, ...data };
});
dispatch({ type: GET_PATIENTS, Patients });
});
};
Как я могу это исправить?
правило базы огня
match /databases/{database}/documents {
match /patients/{patientsID}{
match /patient/{patientID}{
allow read: if resource.data.uid == request.auth.uid;
allow create: if request.resource.data.uid == request.auth.uid;
allow update: if request.resource.data.uid == request.auth.uid;
allow delete: if resource.data.uid == request.auth.uid;
match /diagnostic/{diagnosticID}{
allow read: if true;
allow write: if request.resource.data.uid == request.auth.uid;
}
}
}
}
}
изображение для данных
Комментарии:
1. Я попытался помочь ниже. Если это не так, можете ли вы отредактировать свой вопрос (прямо под ним есть ссылка), чтобы включить: 1) минимальные полные правила, с помощью которых можно воспроизвести эту проблему (поскольку проверка может появиться во многих местах), 2) скриншот документа, который вы ожидаете получить с этим запросом.
2. Я попробую это завтра и дам вам знать, что сейчас уже поздно, спасибо за помощь
3. не получилось я добавлю вопрос с тем, что вы просили об этом
4. теперь это работает после того, как я добавил индексацию в firebase, спасибо
Ответ №1:
Правила не фильтруют данные сами по себе. Вместо этого они просто гарантируют, что запрашиваемые данные соответствуют вашим правилам.
Таким образом, ваш запрос должен соответствовать правилам, а это значит, что они также должны фильтроваться по UID:
.collection("patient")
.orderBy("creation", "desc")
.where("uid", "==", firebase.auth().currentUser.uid)