因此,我正在为我的项目设置firebase安全规则,并且要让用户具有对房间的读取权限,我们需要确保它们是该组织的一部分。所以我有一个像这样的安全规则:
root.child('organizations').child(data.child('organization_id').val()).child('user_ids').hasChild(auth.uid)
这不仅非常丑陋,同一语句中还有其他一些规则(以&& / ||分隔),这些规则以root.child('organizations').child(data.child('organization_id').val())
开头,用于访问与此会议室相关联的组织变量中的数据。
这导致了一些 UGLY 安全规则,有什么方法可以制作临时变量或类似的东西,这样我可以让它更具可读性吗?谢谢!
答案 0 :(得分:4)
不。 Firebase安全规则语言不支持自定义变量。这确实导致了规则之间的大量重复。
最佳解决方案是使用更高级别的语言编写规则,这些语言将编译为Firebase安全规则。最着名的是Blaze(他们的祖父),Butane(不是来自Firebase本身)和Bolt(新的和非常活跃的开发)。
例如,Bolt允许您定义(全局)functions,它可以轻松地封装重复的片段等等。答案 1 :(得分:1)
在博尔特,你可以这样编写你的规则:
type Room {
organization_id: String,
read() { isUserInOrg(this.organization_id) }
}
isUserInOrg(org_id) { root.organizations[org_id].user_ids[auth.uid] }
答案 2 :(得分:1)
自 2020 年 6 月起,答案为 Yes, you can have local variables(回答对他人有帮助的情况)
来自上面链接的 firebase 博客
<块引用>局部变量一直是规则中最受欢迎的功能之一,现在可以在函数中使用。