如何根据兄弟节点保护Firebase节点?

时间:2017-11-16 09:51:33

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

我需要在Firebase中实施一些规则来保护我的数据。

我们说我有节点 a 和节点 b 。结构如下:

{
    a:
    [
        a1: {uid: 123},
        a2: {uid: 321},
        a3: {uid: 567}
    ],
    b:
    [
        a1: {data: 'foo.bar'},
        a2: {data: 'foo.bar'},
        a3: {data: 'foo.bar'}
    ]
}

如上例所示, a 子节点是节点 b 。如何根据节点 a uid 来限制节点 b 数据的访问权限?

例如。节点 a 中的用户 uid 123,其密钥为 a1 ,因此,在节点中b 只能从子节点 a1 (b - > a1)中检索数据。

1 个答案:

答案 0 :(得分:1)

我认为像这样的规则系统符合您的要求:

{
  "rules": {
    "b": {
      "$key": {
        ".read": "auth.uid == root.child('a').child($key).child('uid').val()",
        ".write": "auth !== null"
      }
    }
  }
}

在此示例中,$key$location variable,匹配节点b列表下的任何键。

然后,我们可以使用此$key变量,使用current user's auth.uidroot.child()uid下相应节点的a相匹配。

结果是,只有在b下具有相同密钥的相应子级的uid与当前用户匹配时,才会向a下的子级授予读取权限。 s uid