我自学火堆,我无法找到一种方法,只允许用户更新,删除或只读取他们添加的馆藏。
这是我使用的结构:
我使用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);
});
});
}
答案 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;
}
}
}