Firebase 安全规则中的临时变量

Temporary Variables in Firebase Security rules

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

没有。 Firebase 安全规则语言不支持自定义变量。这确实导致规则之间存在大量重复。

最好的解决方案是用高级语言编写规则,编译成 Firebase 安全规则。最著名的是 Blaze (the grand-daddy of them all), Butane (not from Firebase itself) and Bolt(新的并且正在非常积极的开发中)。

例如,Bolt 允许您定义(全局)functions,它可以轻松封装重复的代码段等等。

在 Bolt 中,您可以这样编写规则:

type Room {
  organization_id: String,

  read() { isUserInOrg(this.organization_id) }
}

isUserInOrg(org_id) { root.organizations[org_id].user_ids[auth.uid] }

自 2020 年 6 月以来,答案是 Yes, you can have local variables(回答以防对他人有帮助)

来自上面链接的 firebase 博客

Local variables have been one of the most requested features in Rules, and they're now available within functions.