聊天/消息的Firebase安全规则

时间:2020-05-24 02:29:25

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

尝试实施一些Firebase规则,目前大多数情况下auth != null都可以,但随后我们涉及到聊天和消息之类的东西,我希望这些规则具有更严格的安全性。

保存聊天记录的方式如下:Chats > MessageId (created by Firebase) > Receiver, Sender, Timestamp, etc.不确定如何编写规则,尤其是对于创建新聊天记录时Firebase创建的唯一MessageId而言。< / p>

我应该以不同的方式构建数据结构,还是将聊天记录保存到数据库的可接受方式?

enter image description here

到目前为止,我尝试过的事情是这样的:

"Chats": {
         "$uid1": {
           "$uid2": {
             ".read": "auth.uid == $uid2",
               ".write": "auth.uid == $uid2",
           },
             ".read": "auth.uid == $uid1",
               ".write": "auth.uid == $uid1"
         }
       }

,但不起作用。由于某种原因,主屏幕随后才无法加载...

有人可以分享如何为我在此处进行的此类聊天实施良好的安全规则吗?

1 个答案:

答案 0 :(得分:0)

MessageId由firebase创建。身份验证ID是您的用户ID。您无法比较两者。您可以尝试以下方法:

{
  "rules": {
    "Chats": {
      "$message_id": {
        // any logged in user can get a list of messages
       ".read": "auth !== null",

        // sender can be write
        ".write": "newData.child('sender').val() === auth.uid"
      }
    },
    "Chatslist": {
      "$user_id": {
        ".read": "auth.uid === $user_id",
        ".validate": "root.child('users/'+$user_id).exists()",  
        "$receiver_id": {
           // user must already exist to add a new receiver
          ".write": "root.child('users/'+$receiver_id).exists()"
        }
      }
    }
  }
}

我不确定,但是您可以阅读docs。有一个类似的例子