firestore数据库规则缺少权限或权限不足

时间:2018-03-06 08:49:04

标签: firebase data-structures google-cloud-firestore rules

我自学火堆,我无法找到一种方法,只允许用户更新,删除或只读取他们添加的馆藏。

这是我使用的结构: firebase database screenshot

我使用firebase auth进行用户处理。我将currentUser.uid user_id保存为数据库中的每个集合。

这些是我使用

的规则
service cloud.firestore {
  match /databases/{database}/documents {

    match /tasks{
      allow read, update, delete: if request.auth.uid == resource.data.user_id;
      allow create: if request.auth.uid != null;
    }
  }

当我尝试读取/获取数据时,我收到Missing or insufficient permissions错误。

我正在使用web api(JavaScript)进行firestore。这是我用来读取数据的代码。

function read() {

    db.collection("tasks").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            var newLI = document.createElement('li');

            newLI.appendChild(document.createTextNode(doc.data().task));

            dataList.appendChild(newLI);

        });
    });

}

2 个答案:

答案 0 :(得分:4)

错误出现在我的JavaScript中我没有按用户过滤

function read() {
    let taskColletion = db.collection("tasks");

    taskColletion.where("user_id", "==", firebase.auth().currentUser.uid).get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            var newLI = document.createElement('li');

            newLI.appendChild(document.createTextNode(doc.data().task));

            dataList.appendChild(newLI);
        });

    });

}

答案 1 :(得分:2)

这实际上是在Firestore Documentation上解释的(我建议阅读)。

您在/tasks之后错过了一张通配符:

service cloud.firestore {
  match /databases/{database}/documents {
    match /tasks/{task} {
      allow read, update, delete: if request.auth.uid == resource.data.user_id;
      allow create: if request.auth.uid != null;
    }
  }
}