如何设置Firebase安全性读取规则

时间:2020-08-19 17:26:08

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

我正在创建一个聊天系统,并且有一个搜索功能,可以在用户个人资料公开的情况下搜索用户。我的Firebase数据库结构如下。

users:{
     $uid1:{
          name:"John",
          created:13739373,
          type:"PRIVATE"
           },
     $uid2:{
          name:"Susan",
          created:12393930,
          type:"PUBLIC"
           },
     $uid3:{
          name:"Titan",
          created:12582938,
          type:"CLOSED"
           }
   }

因此,我为用户这样设置了read规则。

 ".read":"data.child('type').val()==='PUBLIC' || //if user is already friend, alse allow type CLOSED"

如果类型是readPUBLIC(如果两个用户已经是朋友),如何为用户完美设置CLOSED规则。我无法在read下设置$uid规则,因为这是搜索功能。

编辑:这是我的friends路径。

   friends:{
               $uid1:{
                          $uid2: 1273738,  //friend since timestamp
                          $uid3: 1274693,
                          $uid4: 1284869,
                         ...
                    }
           }

Edit2 PUBLIC是每个人都可以看到的,PRIVATE是没有人可以看到/搜索的,CLOSED是只有朋友可以看到的。

1 个答案:

答案 0 :(得分:0)

您必须更新的Firebase实时规则是

"users": {
      "$user_id":{ 
        ".read": "data.child('type').val() == 'PUBLIC' || (data.child('type').val() == 'CLOSED' && auth != null && root.child('friends').child($user_id).child(auth.uid).val() > 0 ) || (data.child('type').val() == 'PRIVATE' && auth != null && $user_id == auth.uid ) "
}