My Chat 和 Friends 节点当然是分开的,所以在为我的 Chat 编写规则时是否可以参考 Friends 节点。
我目前的聊天规则如下:
"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 应用程序中有规则,但被告知我也应该在安全规则中编写它。
答案 0 :(得分:0)
您可以从 root
variable 开始检查数据库中任何位置的数据。
因此,如果您只想允许 uid2
在其 UID 存储在 uid1
的好友列表下的情况下写入 uid1
的消息,您可以检查:
".write": "(auth.uid == $uid_1 || auth.uid == $uid_2)
&& root.child('Friends').child($uid_1).child($uid_2).exists()"
答案 1 :(得分:0)
你可以试试这些规则:
{
"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
不会总是一样的,或者至少你很难维持这样的顺序,比如哪个用户保持第一等等。