【发布时间】:2018-09-05 02:57:32
【问题描述】:
这些是我的 Firestore 安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /collectionA/{someID} {
function checkA() {
return get(/databases/$(database)/documents/collectionA/$(someID)/users/$(request.auth.uid)).data.deleteFlag != true
}
function checkB() {
return get(/databases/$(database)/documents/collectionB/$(request.auth.uid)/companies/$(someID)).data.deleteFlag != true
}
allow read, write: if checkA() || checkB()
}
}
}
这是我的数据库对象:
project {
collectionA {
companyA {
users {
r9Myn4TfzAVpSZGzyaet {
deleteFlag: false
}
}
}
}
collectionB {
aAzUlfztdYdEIXT3Tva73kCiuy93 {
companies {
companyA{
deleteFlag:false
}
}
}
}
}
我试过模拟器:
simulation type : get
location : collectionA/companyA
provider : password
Firebase UID : aAzUlfztdYdEIXT3Tva73kCiuy93
我预计此安全规则会返回“true”。 因为我认为 checkA 返回“false”,而 checkB 返回“true”。 但他们返回“false”。
如果您有任何想法或建议,请告诉我。
【问题讨论】:
-
您的问题的标题是建议单次获取可以,但多次获取不行?你试过把它们分开吗?
-
是的,我的标题就是你所说的。我试过“允许读,写:如果checkA()”,它返回“假”。我尝试了“允许读取,写入:if checkB()”,它返回“true”。
-
如果您确信它没有按您期望的方式工作,并且您有重现步骤来准确说明问题所在,请提交错误报告。 firebase.google.com/support/contact/bugs-features
-
谢谢。我在这个网站上发现了同样的问题。它也没有解决。我要发送错误报告。
标签: firebase google-cloud-firestore firebase-security