Я не могу прочитать данные после обновления правил в firestore (React Native)

# #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;
        }
      }
    }
  }
}
 

изображение для данных

https://1drv.ms/u/s!Ag7uBMx2FuEijuILje2xJIv8RawcFA?e=Gy6jeC

Комментарии:

1. Я попытался помочь ниже. Если это не так, можете ли вы отредактировать свой вопрос (прямо под ним есть ссылка), чтобы включить: 1) минимальные полные правила, с помощью которых можно воспроизвести эту проблему (поскольку проверка может появиться во многих местах), 2) скриншот документа, который вы ожидаете получить с этим запросом.

2. Я попробую это завтра и дам вам знать, что сейчас уже поздно, спасибо за помощь

3. не получилось я добавлю вопрос с тем, что вы просили об этом

4. теперь это работает после того, как я добавил индексацию в firebase, спасибо

Ответ №1:

Правила не фильтруют данные сами по себе. Вместо этого они просто гарантируют, что запрашиваемые данные соответствуют вашим правилам.

Таким образом, ваш запрос должен соответствовать правилам, а это значит, что они также должны фильтроваться по UID:

   .collection("patient")
  .orderBy("creation", "desc")
  .where("uid", "==", firebase.auth().currentUser.uid)