Разрешение Angular Firestore с оператором OR и данными аутентификации, связанными с doc - PullRequest
0 голосов
/ 31 августа 2018

Попытка запустить Angular Firestore с помощью angularfire2. В моей конфигурации правил firebase у меня есть оператор OR, и я могу читать все документы с published == true, но не могу установить флаг isAdmin() в true и читать все документы. Мой сервер Firestore правила похож на

service cloud.firestore {
  match /databases/{database}/documents {

    function isAdmin() {
      return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
    }

    match /myDocs/{myDoc} {
      allow read: if resource.data.published == true || isAdmin();
    }
  }
}

Я также проверил /users/$(request.auth.uid) как путь без успеха. Открытый запрос на стороне клиента для флага published==true выглядит как

const myDocsCollection = this.db.collection('myDocs', ref => ref.where('published', '==', true));
const myDocs = myDocsCollection.snapshotChanges();

И работает довольно хорошо. Но я не могу заставить работать запрос на основе аутентификации, поскольку он не зависит от resource в правилах. Документы в этом случае довольно слабые.

Я пытался использовать .where('auth', '==', firebase.auth().currentUser.uid), но это не работает, и это не имеет особого смысла. Также проверяется только оператор isAdmin() без чего-либо еще и без предложения where. Всегда возвращает недостаточно прав . Нужно ли передавать данные авторизации вручную или Firebase включает данные аутентификации по умолчанию?

Firestore users database

Это фрагмент базы данных пользователей, и ключ определенно равен пользователям uid. В админке я запрашиваю данные с

get(): Observable<MyDoc[]> {
  console.log(firebase.auth().currentUser); // returns user with correct uid
  const myDocsCollection = this.db.collection('myDocs');
  return myDocs = myDocsCollection.snapshotChanges().pipe(/* do some mapping, apply docid */);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...