我知道可以使用通配符在同一节点中引用:
statistics: {
"$uid" : {
".read": "($uid === auth.uid)"
}
}
但是,如果我必须使用通配符添加对其他节点的引用,例如:
statistics: {
.read = "root.child('users').child(//wildcard for unique ids).child('uid').val() == auth.uid"
}
答案 0 :(得分:0)
我认为您正在尝试检查users
集合中是否有任何具有该用户uid
的节点。这是不可能的。安全规则只能访问特定节点,不能搜索它们。
典型的解决方案是添加一个倒置集合,其中uid
是键:
usersByUid
<uid1>: ...
<uid2>: ...
使用这样的结构,您可以使用以下方法检查密钥是否存在:
.read = "root.child('usersByUid').child(auth.uid).exists()"
一般情况下,建议将用户存储在uid
下,而不是其他密钥下。