我有个安全的FireStore规则检查,一个用户具有适当的代码来访问另一文件。
service cloud.firestore {
match /databases/{database}/documents {
match /Orgs/{orgID} {
allow read: if get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
}
}
}
这很好。但是,如果我尝试这个检查进入的自定义功能,像这样:
service cloud.firestore {
match /databases/{database}/documents {
match /Orgs/{orgID} {
allow read: if isPartOfOrg();
}
}
}
function isPartOfOrg(){
return get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
}
然后我开始得到许可的错误。除了将逻辑移到函数中外,我什么也没做,为什么这不起作用?
答案 0 :(得分:2)
我在写问题时弄清楚了。 docs说,函数可以在定义它们的范围内访问变量和函数,而不是从调用它们的地方访问。
因此,移动功能到匹配块的话,一切又有效!
service cloud.firestore {
match /databases/{database}/documents {
match /Orgs/{orgID} {
function isPartOfOrg(){
return get(/databases/$(database)/documents/Users/$(request.auth.uid)).data.OrgCode == resource.data.Code;
}
allow read: if isPartOfOrg();
}
}
}
希望这可以帮助遇到此问题的其他人!