Firebase安全规则中的临时变量

Firebase安全规则中的临时变量,firebase,firebase-security,firebase-authentication,Firebase,Firebase Security,Firebase Authentication,因此,我正在为我的项目设置firebase安全规则,并且为了让用户拥有对房间的读取权限,我们需要确保他们是该组织的一部分。所以我有一个这样的安全规则: type Room { organization_id: String, read() { isUserInOrg(this.organization_id) } } isUserInOrg(org_id) { root.organizations[org_id].user_ids[auth.uid] } root.child('o

因此,我正在为我的项目设置firebase安全规则,并且为了让用户拥有对房间的读取权限,我们需要确保他们是该组织的一部分。所以我有一个这样的安全规则:

type Room {
  organization_id: String,

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

isUserInOrg(org_id) { root.organizations[org_id].user_ids[auth.uid] }
root.child('organizations').child(data.child('organization\u id').val()).child('user\u id').hasChild(auth.uid)

这不仅非常难看,而且在同一语句中还有其他几个规则(以&&/| | |分隔)以
root.child('organizations').child(data.child('organization_id').val())开头,用于访问与此文件室关联的组织变量中的数据


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

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

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


例如,Bolt允许您定义(全局),它可以轻松地封装重复的代码段和更多内容。

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

type Room {
  organization_id: String,

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

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

自2020年6月起,答案是(以防对他人有帮助)

从上面链接的firebase博客

局部变量一直是规则中要求最多的功能之一,它们现在可以在函数中使用


这正是我要找的东西,谢谢!螺栓是未来最有可能采用的推荐方法。从这里开始。欢迎链接到解决方案,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及为什么存在,然后引用您链接到的页面的最相关部分,以防目标页面不可用。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效-