firebase - 将 Firestore 安全规则移至自定义函数会破坏规则
问题描述
我有一个 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;
}
然后我开始收到权限错误。除了将逻辑移入函数之外,我什么都没做,为什么这不起作用?
解决方案
我在写问题时想通了。文档说函数可以从定义它们的范围访问变量和函数,而不是从它们被调用的地方访问。
因此,将函数移动到匹配块中,一切都会再次运行!
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();
}
}
}
希望这可以帮助遇到此问题的其他人!
推荐阅读
- javascript - 在条件下预先检查单选按钮
- python - 如何将pygame场景保存为jpeg?
- laravel-livewire - 第二个表中的分页
- java - 如何在 maven 项目中使用 liquibase-modify-column.jar?
- kubernetes - 为什么 GKE HPA 没有缩减?
- python - 使用没有 ssh-keygen -p 的 python 库解密 Ed25519 私钥
- python - 如何删除索引在数据框中的另一个索引值之后的行?
- powerbi - 带路径的层次结构视觉解释
- azure - Azure 数据工厂和 SSIS 中的事务
- python-3.x - 为什么相同的集合给出不同的结果,一个被迭代而另一个被整体打印