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 聊天只能由 uid1uid2 访问,其他任何人都不能访问。

一种方法可能是:$uidCombo.contains(auth.uid) 但这对于用例来说会失败: uid11_uid2 uid11uid1 都可以访问消息。

我的主要问题是 firebase 中是否存在拆分方法,正如我在建议中看到的那样:

"messages": {
        "$uidcombo": {
          ".read":"$uidcombo.split('__').contains(auth.uid)",
        }

根据安全规则中String type的参考文档,它不支持split方法。所以这似乎是规则编辑器使用的 auto-completer 中的一个错误,它显示了这一点。

为了实现您的目标,您可以使用 beginsWithendsWith 来测试 UID。

".read":"$uidcombo.beginsWith(auth.uid+'__') || 
         $uidcombo.endsWith('__'+auth.uid)"