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

如何在firebase实时数据库中隐藏特定节点,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我有两个关于firebase实时数据库的问题 Q1)是否可以对公众隐藏某个节点,并且只有一个人可以访问该节点 (我想在数据库中保存一个事务密钥,只有1-2个人可以从数据库中访问该密钥。) Q2)如果我的数据库安全规则设置为“公共”,任何人都可以下载/访问完整的数据,或者他们必须知道结构才能从数据库访问数据。A1/是的,可以将对某个节点的访问限制为仅对用户子集的访问。有几种方法可以做到这一点。如果它是一个较小且或多或少稳定的用户子集,则可以检查其uid是否包含在列出管理员用户uid的特定节点中,如

我有两个关于firebase实时数据库的问题

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

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


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

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,“任何人(可以)下载/访问完整数据”。请注意,如中所述:

较浅的安全规则覆盖较深路径的规则。儿童规则 只能将附加权限授予父节点已经拥有的 宣布。它们不能撤消读或写权限


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

谢谢@还有一件事,如上所述,结构中的“其他节点”代表什么?例如,如果我有8个节点,其中我必须隐藏1个节点,其余6个节点是打开的,我如何设置规则?您应该为每个节点创建一个规则,类似于此其他节点的规则。但是,如果我有多个节点,这可能是一个繁忙的过程。有没有表示“一对所有”的简化想法?是的,将所有这些节点放在一个主根节点下。