我有检查的用户具有适当的代码来访问另一文档中的公司的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;
}
然后,我开始获得许可的错误。我没有做任何事情,但移动逻辑到一个函数,这是为什么不工作?
我想通了,而写的问题。该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();
}
}
}
希望这可以帮助别人谁遇到这个问题!