这些是我的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
}
}
}
}
}
我尝试了Simulator:
simulation type : get
location : collectionA/companyA
provider : password
Firebase UID : aAzUlfztdYdEIXT3Tva73kCiuy93
我希望此安全规则返回“ true”。 因为我认为checkA返回“ false”,而checkB返回“ true”。 但是他们返回了“ false”。
如果您有任何想法或建议,请告诉我。
答案 0 :(得分:0)
我听说模拟器有时无法正常工作。 我从客户端提出查询并进行了验证,它可以正常工作。 所以我认为这是模拟器中的错误。 但是,我收到了开发人员平台支持的以下回复。
仅供参考
如果尝试获取一个值,get函数将得到一个错误。 不存在的对象。当条件发生错误时 判断,安全规则未应用在安全规则中。 由于安全规则的规范,不可能 控制不存在的对象