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.
因此,我正在为我的项目设置 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.