Firebase 实时数据库:安全规则中的拆分方法:保存规则时出错 - 第 6 行:没有这样的 method/property 'split'
Firebase Realtime Database: Split method in security rules: Error saving rules - Line 6: No such method/property 'split'
我将用户消息存储在实时数据库中,如下所示:
<USER_1_UID>__<USER_2_UID>
现在在创建对象之前,我正在对其进行排序,以确保对于两个用户而言,密钥始终匹配。
我希望用户能够 read/write 仅当通过 __
拆分的密钥包含请求它的用户的 uid 时才能够发送消息。
例如:
uid1__uid2
聊天只能由 uid1
和 uid2
访问,其他任何人都不能访问。
一种方法可能是:$uidCombo.contains(auth.uid)
但这对于用例来说会失败:
uid11_uid2
uid11
和 uid1
都可以访问消息。
我的主要问题是 firebase 中是否存在拆分方法,正如我在建议中看到的那样:
"messages": {
"$uidcombo": {
".read":"$uidcombo.split('__').contains(auth.uid)",
}
根据安全规则中String type的参考文档,它不支持split
方法。所以这似乎是规则编辑器使用的 auto-completer 中的一个错误,它显示了这一点。
为了实现您的目标,您可以使用 beginsWith
和 endsWith
来测试 UID。
".read":"$uidcombo.beginsWith(auth.uid+'__') ||
$uidcombo.endsWith('__'+auth.uid)"
我将用户消息存储在实时数据库中,如下所示:
<USER_1_UID>__<USER_2_UID>
现在在创建对象之前,我正在对其进行排序,以确保对于两个用户而言,密钥始终匹配。
我希望用户能够 read/write 仅当通过 __
拆分的密钥包含请求它的用户的 uid 时才能够发送消息。
例如:
uid1__uid2
聊天只能由 uid1
和 uid2
访问,其他任何人都不能访问。
一种方法可能是:$uidCombo.contains(auth.uid)
但这对于用例来说会失败:
uid11_uid2
uid11
和 uid1
都可以访问消息。
我的主要问题是 firebase 中是否存在拆分方法,正如我在建议中看到的那样:
"messages": {
"$uidcombo": {
".read":"$uidcombo.split('__').contains(auth.uid)",
}
根据安全规则中String type的参考文档,它不支持split
方法。所以这似乎是规则编辑器使用的 auto-completer 中的一个错误,它显示了这一点。
为了实现您的目标,您可以使用 beginsWith
和 endsWith
来测试 UID。
".read":"$uidcombo.beginsWith(auth.uid+'__') ||
$uidcombo.endsWith('__'+auth.uid)"