Изменить правила Firebase - PullRequest
0 голосов
/ 29 октября 2019

Я использую следующие правила FireBase:

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

    match /classes/{document=**} {
        allow read, write: if isSignedIn();
    }

    match /users/{userId}/{document=**} {
        allow read, write: if isSignedIn() && request.auth.uid == userId || isSignedIn() && hasPermission();
    }
  }

  function isSignedIn() {
    return request.auth.uid != null;
  }

  function hasPermission() {
    return request.auth.uid in resource.data.ruleList;
  }
}  

rulesList contains my user_uuid. Если пользователь хочет управлять своими собственными документами, это работает. Там будет, например, пэт: /users/32T9lJ5nSEZrhLgxul4goBcscqk2/...data. Но администраторы должны читать данные других пользователей. И именно это не работает. Когда ruleList содержит user_uuid, он должен иметь возможность читать все данные каждого пользователя. Что я делаю не так?
Следующий код получает пользователя user_uuids из коллекции, называемой «классы», и выполняет поиск по имени каждого пользователя:

db.collection("classes").doc(klasse).get().then(function(doc) {
    if (doc.exists) {
      const data = doc.data();
      const members = data.members;

      members.reduce((chain, el) => {
        return chain
        .then(() => db.collection("users").doc(el).collection("user_data").doc("u").get())
        .then(doc => {
          const data = doc.data();
          var member_name = data.name;
        })
    }, Promise.resolve()).then(console.log("finished"));
  } else {
    console.log("No such document!");
  }
}).catch(function(error) {
  console.log("Error getting document:", error);
});

Возвращает предупреждение, вызванное недостаточным разрешением.
~ филип

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...