Firebase 正在验证对指定的经过身份验证的用户的读取访问权限

Firebase 正在验证对指定的经过身份验证的用户的读取访问权限,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我正计划为一个聊天应用程序创建一个实时数据库,该应用程序具有私人消息通道,是否有任何特定规则,我们可以检查经过身份验证的用户是否有权访问此房间 我的数据库结构大致如下: { "channel": { "unique_room_id": { "participants": { "uid1": 1537259273000, "uid2": 1537259273000

我正计划为一个聊天应用程序创建一个实时数据库,该应用程序具有私人消息通道,是否有任何特定规则,我们可以检查经过身份验证的用户是否有权访问此房间

我的数据库结构大致如下:

{
  "channel": {
       "unique_room_id": {
            "participants": {
                 "uid1": 1537259273000,
                 "uid2": 1537259273000
            }
            "message": {
                 ....
            }
       }
   }
}
是否可以像在.write规则上使用hasChild那样使用它,或者我们需要手动验证引用,这意味着实际上不可能向会议室添加更多参与者

如果可能的话,我想避免后者,提前谢谢

注:


我也对任何替代结构持开放态度,也许还可以解释为什么建议使用顶级列表,而不是将多个实体类型嵌套在一个列表中。因此,将数据重新建模为:

{
    "participants": {
        "unique_room_id": {
            "uid1": 1537259273000,
            "uid2": 1537259273000
        }
    }
    "messages": {
        "unique_room_id": {
             ....
        }
    }
}
现在,您可以确保只有房间中的参与者可以通过以下方式阅读其邮件:

{
  "rules": {
    "messages": {
      "$roomid": {
        ".read": "root.child('participants').child($roomid).child(auth.uid).exists()"
      }
    }
  }
}

我尝试使用.child($roomid)进行部署,但在使用firebase工具进行部署时,它返回了一个错误,即它需要一个字符串,$roomid上的单个引号将在firebase上解析为变量还是将解析为普通字符串?在
.child($roomid)
,否则,它将被视为普通字符串。如果Firebase抱怨不知道
$roomid
,请检查您是否在
的“消息”{
“$roomid”下为其指定了完全相同的名称:{啊,是的,它可以工作,它在上层节点上有输入错误。感谢您的帮助