Firestore запрос массив / правила не работают resources.viewers - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь получить "прочитанные" правила, работающие из массива в соответствии с этим блогом https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html

  var db = firebase.firestore();
  db.collection("_users").where("viewers", "array-contains", myUID)
    .get()
    .then((querySnapshot) => {
      querySnapshot.forEach((doc) => {
        console.log(doc.id, ' => ', doc.data());
      });
    });

То же в AngularFirestore

this.itemsCollection_users = this._afDB.collection("_users", ref => ref.where("viewers", "array-contains", myUID)))

The DB 
/_users/EGsht477klOKW0YeYsryo0j8AkY2/sometext = "hello",
/_users/EGsht477klOKW0YeYsryo0j8AkY2/viewers [
  0: hKeDFsC6wOQZGz0rP7SnJ7Vo5O73,
  1: Y8xbH2avmCWmm1EBK7wappM2qE03
]

Правила БД сервис cloud.firestore {

  match /databases/{database}/documents {   
    match /_users/{userId} {

        allow read: if request.auth.uid in resource.viewers;    

    }
}
}

Таким образом, пользователь EGsht477klOKW0YeYsryo0j8AkY2 должен быть доступен (читать) для всех пользователей, перечисленных в «средствах просмотра»

Предупреждение, которое я получаю ...

ERROR FirebaseError: Missing or insufficient permissions.

1 Ответ

0 голосов
/ 15 мая 2019

Переменная resource в ваших правилах безопасности указывает на Resource объект .Чтобы получить на его данные, вам нужно использовать resource.data, поэтому:

 allow read: if request.auth.uid in resource.data.viewers; 
...