【问题标题】:How to hide specific node in firebase realtime database如何在firebase实时数据库中隐藏特定节点
【发布时间】:2019-05-22 10:11:06
【问题描述】:

我有 2 个与 firebase 实时数据库相关的问题。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    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 的安全规则设置为公开,“任何人(可以)下载/访问完整数据”。请注意,正如documentation 中所述:

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

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

    【讨论】:

    • 谢谢! @雷诺
    • 上面提到的另一件事,结构中的“其他节点”代表什么?例如,如果我有 8 个节点,我必须从中隐藏 1 个节点,其余 6 个节点是公开的,我该如何设置规则?
    • 您应该为每个节点创建一个类似于其他节点规则的规则
    • 但是如果我有很多节点,这可能是一个忙碌的过程。有什么可以代表所有人的简化想法吗?
    • 是的,将所有这些节点放在一个主根节点下。
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2019-01-26
    相关资源
    最近更新 更多