Firestore 权限

Firestore permissions

如何配置权限,使用户只能读取和写入他们是所有者的文档? 我的文档有一个名为 owner 的顶级属性。

我阅读了这些文档
https://firebase.google.com/docs/firestore/security/secure-data?authuser=0#the_resource_variable

这似乎应该有效?

service cloud.firestore {
  match /databases/{database}/documents {
    match /analysis/{analysis} {
      allow read, write: if request.auth.email == resource.data.owner
    }
  }
}

但这似乎不起作用。我不断收到权限不足的错误。 我需要更改什么?


更新:

阅读@Doug Stevenson 链接的文档后,我决定使用

service cloud.firestore {
  match /databases/{database}/documents {
    match /analysis/{analysis} {
      allow read, write: if request.auth.uid == resource.data.owner_uid;
    }
  }
}

所以我的初衷是当我们进行列表操作时:

a. 只返回属于某个用户的文档
b. 只有用户拥有的文档才能被该用户读取或写入。

通过以上配置b.就完成了
我该如何完成 a. ?

根据 documentation,您应该使用 request.auth.token.email(而不是 request.auth.email)。

回答您的更新问题部分 (a):

我有类似的问题 - 我的规则设置正确,允许该用户读写。但是,Firestore 需要我们的查询与 firestore 数据库规则相匹配。因此,前面的查询应该与该用户有权访问的内容相匹配。所以我的问题是我要的是系列中的所有产品。我需要将其更改为要求集合中的所有产品,其中产品的 "owner" 与登录用户匹配,如下所示:

db.collection('products').where('owner', '==', firebase.auth().currentUser.uid).get()

希望对您有所帮助