验证对指定身份验证用户的读取访问权限

时间:2018-09-18 08:41:29

标签: firebase firebase-realtime-database firebase-security-rules

我正计划为带有私人消息频道的聊天应用程序创建一个实时数据库,是否有任何特定规则可以检查经过身份验证的用户是否可以访问此会议室?

我的数据库结构主要是这样的:

{
  "channel": {
       "unique_room_id": {
            "participants": {
                 "uid1": 1537259273000,
                 "uid2": 1537259273000
            }
            "message": {
                 ....
            }
       }
   }
}

是否可以像在.write规则上那样使用hasChild,还是需要手动验证引用,这意味着实际上不可能向会议室添加更多参与者?

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

注意:

我也对任何其他结构持开放态度,也许有人解释为什么推荐这种结构

1 个答案:

答案 0 :(得分:0)

使用顶级列表而不是将多个实体类型嵌套在单个列表中总是最容易的。因此,将数据重构为:

{
    "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()"
      }
    }
  }
}