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”下为其指定了完全相同的名称:{啊,是的,它可以工作,它在上层节点上有输入错误。感谢您的帮助