我的应用程序的Firebase规则混乱

时间:2019-10-20 10:25:02

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

我在编写Firebase权限时遇到麻烦。我希望那些经过身份验证的用户仅写入用户部分,而其他所有人都应该能够读取或写入数据库的任何部分。有什么方法可以定义每个表的规则,默认为true并仅限制要验证的用户部分,或者我必须为每个表显式编写规则。

PS。如果有人可以指导我,我应该为具有以下结构的应用程序执行哪些规则来发送和接收消息,那就太好了

聊天

朋友

-用户

-message_notifications

消息

-通知

  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {

      "Users":{
      "$uid":{
            ".read": true,
             ".write": "auth.uid == $uid"
      }
    }

  }

}

1 个答案:

答案 0 :(得分:1)

  

有什么方法可以为每个表定义规则(默认为true),并限制仅对用户节进行身份验证?

一旦用户可以访问数据库中某个级别的数据,他们就可以访问该级别下的所有数据。您不能在较低级别上撤消此权限。因此,无法让用户访问根目录下的所有数据,然后排除一个节点。

您可以 做的是使用$通配符规则创建两种类型的顶级节点:

{
  "rules": {
    "Users":{
      "$uid":{
        ".read": true,
         ".write": "auth.uid == $uid"
      }
    },
    "$others": {
      ".read": true,
      ".write": true
    }
  }
}

根据上述规则,用户可以:

  • 仅当用户知道该用户的UID时,才读取该用户的/Users/$uid节点。
  • 只能写自己的/Users/$uid节点。
  • 可以读取和写入所有其他数据。