Firebase安全规则中的临时变量

时间:2015-10-23 15:27:13

标签: firebase firebase-security firebase-authentication

因此,我正在为我的项目设置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 安全规则,有什么方法可以制作临时变量或类似的东西,这样我可以让它更具可读性吗?谢谢!

3 个答案:

答案 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 博客

<块引用>

局部变量一直是规则中最受欢迎的功能之一,现在可以在函数中使用。