如何在Firebase实时数据库中隐藏特定节点

时间:2019-05-22 10:11:07

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

我有两个与Firebase实时数据库有关的问题。

Q1)是否可以向公众隐藏某个节点,并且只有一个人可以访问该节点?

(我想在数据库中保存一个交易密钥,只有1-2个人可以从数据库访问该密钥。)

Q2)如果我的数据库安全规则设置为public,任何人都可以下载/访问完整数据,或者他们必须知道结构才能从数据库访问数据。

1 个答案:

答案 0 :(得分:2)

A1 / 是,可以将对特定节点的访问限制为仅用户子集。有几种解决方法。如果它是一小部分用户,或多或少稳定,那么您可以检查其uid是否包含在列出管理员用户uid的特定节点中,如下所示:

{
  "rules": {
    "secretnode": {
      //only an admin user can read
      ".read": "auth != null && root.child('adminusers/' + auth.uid).exists()"
    },
    "adminusers": {
        ".read": false,
        ".write": false
    },
    "othernodes": {
        ".read": true,
        ".write": true     
    }
  }
}

例如,在数据库中,按如下方式保存管理uid:

DBRoot
   - adminusers
        - uid1
           - name: "aaaaaa"
           - otherDataItem: "xxxxxx"
        - uid2
           - name: "bbbbb"
           - otherDataItem: "yyyy"

A2 / 是,如果将数据库 root 的安全规则设置为public,则“任何人都可以下载/访问完整数据”。请注意,如documentation中所述:

  

较浅的安全规则会覆盖较深路径的规则。子规则   只能授予父节点已经拥有的特权   宣布。他们无法撤消读取或写入权限。

换句话说,这意味着,如果您对数据库 root 的安全规则设置为公开,则任何人都可以下载代表您数据的完整JSON树,而无需知道其结构。