Firebase:从不安全的规则到强大的安全级别的一种方法

时间:2018-08-14 01:44:42

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

我的实时数据库由两个表(用户和对话)组成。该数据库存储聊天消息和用户。所有对话都是在两个人之间进行。

数据库结构:

**Users**

- AliceID 
    - Credentials 
        - Email (*alice@mail.com*) 
        - Name (*Alice*) 
        - ProfilePictuteLink (*https ...*) 

    - MyConversations 
        - interlocutorID (*BobID*) 
            - ConversationID (*AliceBobConvID*) 

- BobID  
    - Credentials 
        - Email (*bob@mail.com*) 
        - Name (*Bob*) 
        - ProfilePictuteLink (*https ...*) 

    - MyConversations 
        - interlocutorID (*AliceID*) 
            - ConversationID (*AliceBobConvID*) 


**Conversations**

- IDofConversation (*AliceBobConvID*) 
    - messageID (*1*) 
        - Content: “Hi, Alice!” 
        - fromID: “BobID” 
        - isRead: true 
        - Timestamp: 1524636221 
        - toID: “AliceID” 
        - Type: “text” 

    - messageID (*2*) 
        - Content: “Hi, Bob!” 
        - fromID: “AliceID” 
        - isRead: true 
        - Timestamp: 1524636321 
        - toID: “BobID” 
        - Type: “text”

当前我正在使用以下不安全规则

{
  "rules": {

    "users" : {
        ".read" : "auth != null",
       ".write" : "auth != null"  
    },

    "conversations" : {
        ".read" : "auth != null",
        ".write" : "auth != null" 
      }
  }
}

问题: 是否可以为当前数据库结构编写强大的安全规则?如果是这样,那么请提出安全规则,以实现数据库的强安全级别。如果不是,那么请提出一个数据库结构,该结构可以轻松创建强大的安全规则。

一些要求:

  1. 用户应该只能读取/写入自己的凭据。
  2. 用户应该只能读取/写入自己的“ MyConversations”。
  3. 用户应该能够删除与对话者的对话。
  4. 应该可以向用户添加新用户。
  5. 用户将第一条消息写给另一位用户后,该用户就应该能够在“会话”中创建新记录。

我正在使用Facebook身份验证。

1 个答案:

答案 0 :(得分:1)

  

是否可以为当前数据库编写严格的安全规则   结构?

  

如果是,那么请提出安全规则以实现强大的安全性   数据库级别。

通常,对于您的情况,我们实施用户关联安全性规则。这意味着将为每个聊天(IDofConversation)分配userId。您可以在IDofConversation中添加一个特殊的数组来跟踪分配的userId。您的安全规则将用于检查是否分配了用户访问。有关如何构建数据库安全规则的更多详细信息,请参见here