我正在尝试设置Firestore安全性,以便用户可以读写自己的文档 这是我用来向数据库添加数据的代码
data() {
return {
order: {
price: null,
amount: null,
comment: null,
createdAt: new Date().toString().slice(0, 25),
uid: fb.auth().currentUser.uid
}
}
}
sendBuy() {
db.collection("orders").add(this.order);
}
这是读取数据的代码
readData() {
let uid = fb.auth().currentUser.uid;
db.collection("orders")
.where("uid", "==", uid)
.get()
.then(querySnapShot => {
querySnapShot.forEach(doc => {
console.log(doc.id, "=>", doc.data());
});
});
}
我尝试过的Firestore规则不起作用
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /orders/{uid} {
allow read, write: if request.resource.data.uid == request.auth.uid;
}
}
}
请问我该如何实现
答案 0 :(得分:1)
对于读取操作/查询,您需要检查resource.data.uid
而不是request.resource.data.uid
。所以:
allow read: if resource.data.uid == request.auth.uid;
这也许也可以用于写操作,但是我还没有测试过。
答案 1 :(得分:1)
这些规则应该起作用:
allow read: if resource.data.uid == request.auth.uid;
allow write: if request.resource.data.uid == request.auth.uid;
要修复写入中的安全漏洞,您可以执行以下操作(请保持相同):
allow create: if request.resource.data.uid == request.auth.uid
allow update, delete: if resource.data.uid == request.auth.uid && request.resource.data.uid == resource.data.uid
这允许任何登录的人创建属于他们的订单。它仅允许用户在匹配其uid的情况下更新订单,并且不允许他们更改uid。