6

因此,我正在为我的项目设置 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())以访问与此房间关联的组织变量中的数据开始。

这导致了一些丑陋的安全规则,有什么方法可以制作临时变量或类似的东西,这样我就可以使它更具可读性?谢谢!

4

3 回答 3

5

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

最好的解决方案是用高级语言编写规则,编译成 Firebase 安全规则。最著名的是Blaze(它们的祖父)、Butane(不是来自 Firebase 本身)和Bolt(新的并且正在非常积极的开发中)。

例如,Bolt 允许您定义(全局)函数,这些函数可以轻松封装重复的片段等等。

于 2015-10-23T15:54:43.980 回答
1

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

type Room {
  organization_id: String,

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

isUserInOrg(org_id) { root.organizations[org_id].user_ids[auth.uid] }
于 2016-01-13T22:22:18.227 回答
1

自 2020 年 6 月起,答案是肯定的,您可以使用局部变量(以防万一对其他人有帮助)

来自上面链接的 firebase 博客

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

于 2021-04-26T23:48:19.957 回答