我正在开发一个社交媒体应用程序,用户可以在其中关注其他用户。我需要合并一个阻止用户功能。
如果用户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的数据。我该如何调整规则来做到这一点?
答案 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"
}
}
}
}
}