是否可以使用通配符引用firebase安全规则中其他节点中的数据?

时间:2017-06-15 07:36:10

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

我知道可以使用通配符在同一节点中引用:

statistics: {
     "$uid" : {
          ".read": "($uid === auth.uid)"
      }
}

但是,如果我必须使用通配符添加对其他节点的引用,例如:

statistics: {
  .read = "root.child('users').child(//wildcard for unique ids).child('uid').val() == auth.uid"
}

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试检查users集合中是否有任何具有该用户uid的节点。这是不可能的。安全规则只能访问特定节点,不能搜索它们。

典型的解决方案是添加一个倒置集合,其中uid是键:

usersByUid
  <uid1>: ...
  <uid2>: ...

使用这样的结构,您可以使用以下方法检查密钥是否存在:

.read = "root.child('usersByUid').child(auth.uid).exists()"

一般情况下,建议将用户存储在uid下,而不是其他密钥下。