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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了firestore数据库规则缺少权限或权限不足相关的知识,希望对你有一定的参考价值。

我正在自学firestore,我无法找到一种方法只允许用户更新,删除或只读取他们添加的集合。

这是我正在使用的结构:

我使用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)for 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);

        });
    });

}
答案

错误发生在我的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);
        });

    });

}
另一答案

这实际上是在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;
    }
  }
}

以上是关于firestore数据库规则缺少权限或权限不足的主要内容,如果未能解决你的问题,请参考以下文章

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

使用访问规则中的字段写入 Firestore 时缺少权限或权限不足

Firebase 身份验证正在运行,但 Firestore 以缺少权限或权限不足为由拒绝请求

Firestore 安全规则:“PERMISSION_DENIED:权限缺失或不足。”

Firebase Cloud Functions Firestore 触发器产生:错误:7 PERMISSION_DENIED:缺少权限或权限不足

Firebase Cloud Functions 无法写入 Firestore 数据库 - 权限缺失或不足