用于2个节点的聊天应用程序的Firebase实时数据库规则



我的聊天和朋友节点当然是分开的,所以在为我的聊天编写规则时可以参考朋友节点吗。

我目前的聊天规则如下:

"Chats": {
"$uid_1":{
"$uid_2":{
".read": "auth.uid == $uid_1  || auth.uid == $uid_2", 
".write": "auth.uid == $uid_1  || auth.uid == $uid_2 "
}
}
},

数据库中的好友结构

- Friends
-uid1
-uid2
- username

-uid2
-uid1
- username


当用户不再是朋友时,我如何确保消息不会通过?我的android应用程序中有规则,但有人告诉我也应该把它写在安全规则中。

您可以从root变量开始检查数据库中的任何位置的数据。

因此,如果您只想允许uid2在其UID存储在uid1的好友列表下的情况下写入uid1的消息,您可以检查:

".write": "(auth.uid == $uid_1  || auth.uid == $uid_2) 
&& root.child('Friends').child($uid_1).child($uid_2).exists()"

您可以尝试以下规则:

{
"rules": {
"chats": {
"$uid": {
"$uid2": {
".read": "auth.uid === $uid || auth.uid === $uid2",
".write": "auth.uid === $uid && root.child('friends').child($uid).child($uid2).exists()"
}
}
}
}
}

这仍将保持两个用户的READ访问权限,但他们无法写入新消息。

尽管您的数据库结构看起来有点难以存储消息。我相信chats -> uid 1 -> uid2不会总是一样的,或者至少你很难维持订单,比如哪个用户保持第一等等

最新更新