我正在尝试设置 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; } }}请问我怎样才能做到这一点
2 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
这些规则应该有效:
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。
暮色呼如
TA贡献1853条经验 获得超9个赞
对于读取操作/查询,您需要检查resource.data.uid
而不是request.resource.data.uid
. 所以:
allow read: if resource.data.uid == request.auth.uid;
这也可能适用于写入,但我还没有测试过。
添加回答
举报
0/150
提交
取消