Firebase Firestore:更好地了解获取其他文档时安全规则的工作方式
我真的在挖掘Firestore,但很难找到具体问题的答案,所以我来了。这只是为了确保我正确理解了安全规则的工作原理:) 以下是我的模式:Firebase Firestore:更好地了解获取其他文档时安全规则的工作方式,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我真的在挖掘Firestore,但很难找到具体问题的答案,所以我来了。这只是为了确保我正确理解了安全规则的工作原理:) 以下是我的模式: /databases/{database}/documents/Bases/Base1 { roles: { // map user1: {admin: true} }, Items: { // SubCollection item1: { name: "Hello World"
/databases/{database}/documents/Bases/Base1 {
roles: { // map
user1: {admin: true}
},
Items: { // SubCollection
item1: {
name: "Hello World"
},
...n,
item10: {
name: "Good Bye World"
}
}
}
我想让我的user1
获取Base1中的所有10项。查询非常简单db.collection('base').doc('Base1').collection('Items').get()
但我还想确保user1是Base1中的管理员。因此,我要设置以下安全规则:
match /bases/{baseId}/items/{itemId}{
allow read: if request.auth != null
&& get(/databases/$(database)/documents/bases/$(baseId)).data.roles[request.auth.id].admin == true
}
这很有效,很好。以下是问题:
1/我知道这个规则get()会花费我一读(我知道这很便宜)。需要验证的是每个查询读取一次还是每个文档读取一次?在我的情况下读10
2/我假设1/的答案是它将花费10次阅读。但是,由于我总是查询相同的$(baseId),缓存将启动,即使不能保证,它也会大大减少收费读取的数量(理论上,即使我获取1000个文档,也会读取1次)
欢迎提供关于如何处理此类模式的任何其他建议。我知道阅读操作非常便宜,但我想知道我要去哪里:)
非常感谢:)安全规则中的get()
成本只适用于每个查询一次。它不适用于获取的每个文档
由于您有一个查询,因此需要一次读取。根据您的需要,您可以在用户auth上使用customClaims,这将花费您零次读取-但是空间有限,因此声明需要简单,如“{admin:true}”或{admin:“managedAccountID”}。有额外的操作复杂性(声明必须由安全节点管理,如CloudFunction),但它是完全安全的。