Firebase规则,允许用户阻止其他用户读取其数据

时间:2018-06-29 16:23:47

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

我正在开发一个社交媒体应用程序,用户可以在其中关注其他用户。我需要合并一个阻止用户功能。

如果用户A阻止了用户B,则不允许用户B查看用户A的个人资料并读取其数据。与在Instagram和Facebook上阻止用户相同的功能。我想我已经接近了,但是我已经在Firebase上设置了一个节点,以添加被阻止的用户。

对于用户A和用户B,数据库如下所示:

  

-blockedUser:
  ---用户A:
  ------用户B:是

Database.database().reference().child("blockedUser").child(currentUserId).child(userToBlock).setValue(true)
  

这就是我的数据库的设置方式,这些是我的规则的样子:

{
  "rules": {
    "users": {
      "$user_id": {
        "$blockedID" : {
            ".read": "auth != null && !root.child('blockedUser/'+$user_id+'/'+$blockedID+'/true').exists()",
           ".write": "$user_id === auth.uid"
        }
      }
    }
  }
}

我遇到的问题是规则。就用户A和用户B而言,一旦用户B被阻止,它将阻止用户B读取数据库上的任何数据。我要达到的目的是当用户B被用户A阻止时,它应该阻止用户B仅读取用户A的数据。我该如何调整规则来做到这一点?

1 个答案:

答案 0 :(得分:0)

采用这种方法,可以防止用户B阅读包含阻止信息的字段。您想要的是将规则应用于另一个层次结构级别。通过使用auth.uid(在方案用户B中),可以防止当前用户读取特定用户(在方案用户A中)的任何数据。

{
  "rules": {
    "users": {
      "$user_id": {
        ".read": "auth != null && !root.child('users').child($user_id).child(auth.uid).exists()",
        "$blockedID" : {
           ".write": "$user_id === auth.uid"
        }
      }
    }
  }
}