为了账号安全,请及时绑定邮箱和手机立即绑定

允许用户读取、写入自己的文档 Firestore

允许用户读取、写入自己的文档 Firestore

撒科打诨 2022-10-27 16:16:40
我正在尝试设置 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。


查看完整回答
反对 回复 2022-10-27
?
暮色呼如

TA贡献1853条经验 获得超9个赞

对于读取操作/查询,您需要检查resource.data.uid而不是request.resource.data.uid. 所以:

allow read: if resource.data.uid == request.auth.uid;

这也可能适用于写入,但我还没有测试过。


查看完整回答
反对 回复 2022-10-27
  • 2 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信