Правило безопасности Firestore get () не работает при выполнении запроса к нескольким документам - PullRequest
0 голосов
/ 12 июня 2018

У меня проблема при попытке получить доступ к некоторым документам.Там написано, что у меня нет разрешения на доступ к документу.Итак, у меня есть следующее в правилах Firestore

match /reservations/reservations-request/list/{reservationInfo} {
  allow read: if get(/databases/$(database)/documents/reservations/reservations-request/list/$(reservationInfo)/members-id/data).data.driverId == request.auth.uid || 
  get(/databases/$(database)/documents/reservations/reservations-request/list/$(reservationInfo)/members-id/data).driverId == request.auth.uid;
  allow write: if false;
}

В симуляторе, когда я использую тот же uid и номер телефона, что и в своем приложении, он говорит, что мне разрешено получать документ сэтот путь.Однако, когда я пытаюсь сделать то же самое в приложении (с тем же идентификатором пользователя и номером телефона), оно не позволяет мне получить доступ к документам.Код, по которому я пытаюсь получить доступ к документам:

fetchReservationsAsDriver(type: string, driverId: string): Promise < any > {
    var size = 0;
    var reservations: ReservationDB[] = [];
    return new Promise((resolve, reject) => {
      let reservation_aux;
      firebase.firestore().collection('reservations').doc("reservations-requested").collection('list').where("driver.id", "==", driverId).get().then(function (array) {
          size = array.size;
          if (size == 0) {
            resolve(reservations);
          }
          array.forEach(function (doc) {
            reservation_aux = doc.data();
            reservations.push(reservation_aux);
            console.log(doc.id, " => ", doc.data());
          });
          resolve(reservations);
        })
        .catch(function (error) {
          console.log("Error getting documents: ", error);
          reject(error);
        });
    });
}

Спасибо за помощь!

--------- РЕДАКТИРОВАТЬ ----------

Я понял, в чем именно проблема:

, если у меня есть это:

match /reservations/requested-reservations/list/{reservationInfo} {
      allow read: if get(/databases/$(database)/documents/reservations/requested-reservations/list/$(reservationInfo)/members-id/data).data.driverId == request.auth.uid
}

правила пожарного магазина не позволяют мнечтобы получить любой документ из коллекции "list", но я понял, что если изменить это правило:

match /reservations/requested-reservations/list/{reservationInfo} {
      allow read: if get(/databases/$(database)/documents/reservations/requested-reservations/list/IYB0710-2018-06-13-1528922084314/members-id/data).data.driverId == request.auth.uid
}

firebase позволяет мне прочитать документ (по крайней мере, документ с именем "IYB0710-2018-06-13-1528922084314 ", который является одним из документов из коллекции" list ".

Это означает, что в действительности он не заменяет $ (bookingInfo) именем документа, когда япопробуйте получить группу документов с помощью этой команды из моего приложения:

firebase.firestore().collection('reservations').doc(type).collection('list').where("driver.id", "==", driverId).get().then(function (array) {
    // Do Something
})
...