我正在尝试根据另一个文档验证firestore中的读取。
数据结构由2个集合组成:“执行”和“测试”。
在测试集合中,只有一个文档,具有以下ID:SRJKCxU4HVDBdB3qyfzG,以及theese值:
admin true
id: "SRJKCxU4HVDBdB3qyfzG"
test: 1
我的安全规则如下所示:
service cloud.firestore {
match /databases/{database}/documents {
function testFunction(testId) {
// return exists(/databases/$(database)/documents/test/$(testId));
return get(/databases/$(database)/documents/test/$(testId)).data.id == "SRJKCxU4HVDBdB3qyfzG";
}
match /execution/{exeid} {
allow read, write: if testFunction("SRJKCxU4HVDBdB3qyfzG");
}
}
}
如果我使用return exists(/databases/$(database)/documents/test/$(testId));
,一切都按预期工作。但无论如何我都无法让这条线工作return get(/databases/$(database)/documents/test/$(testId)).data.id == "SRJKCxU4HVDBdB3qyfzG"
。
我真的希望我错过简单明了吗?任何帮助都很常见。如有必要,我还创建了一个demo firebase项目和stackblitz。
感谢您的帮助。
更新 - 临时解决方案 由于firestore安全规则错误,因此不会填充data属性。这将是固定的。 get()工作的临时解决方案如下:
get(path).data.prop || get(path).prop
答案 0 :(得分:3)
setOffScreenPageLimit
尚不存在,这就是为什么你不能这样做的原因。
答案 1 :(得分:3)
根据this Stack Overflow question,Firebase安全规则目前存在错误:
因为错误是未填充数据对象,所以应检查这两个属性。启动这个bug的解决方案没有ETA ..
临时解决方案是将代码更改为:
{{1}}