是否可以使用通配符在 firebase 安全规则中引用其他节点中的数据?
Is it possible to reference data in other nodes in firebase security rules using wildcards?
我知道可以使用通配符在同一节点中进行引用:
statistics: {
"$uid" : {
".read": "($uid === auth.uid)"
}
}
但是,如果我必须使用通配符添加对其他一些节点的引用怎么办,例如:
statistics: {
.read = "root.child('users').child(//wildcard for unique ids).child('uid').val() == auth.uid"
}
我认为您正在尝试检查 users
集合中是否有任何节点具有用户的 uid
。这不可能。安全规则只能访问特定节点,不能搜索它们。
典型的解决方案是添加一个倒排集合,其中uid
是键:
usersByUid
<uid1>: ...
<uid2>: ...
使用这样的结构,您可以使用以下方法检查密钥是否存在:
.read = "root.child('usersByUid').child(auth.uid).exists()"
一般来说,建议将用户存储在 uid
而不是其他键下。
我知道可以使用通配符在同一节点中进行引用:
statistics: {
"$uid" : {
".read": "($uid === auth.uid)"
}
}
但是,如果我必须使用通配符添加对其他一些节点的引用怎么办,例如:
statistics: {
.read = "root.child('users').child(//wildcard for unique ids).child('uid').val() == auth.uid"
}
我认为您正在尝试检查 users
集合中是否有任何节点具有用户的 uid
。这不可能。安全规则只能访问特定节点,不能搜索它们。
典型的解决方案是添加一个倒排集合,其中uid
是键:
usersByUid
<uid1>: ...
<uid2>: ...
使用这样的结构,您可以使用以下方法检查密钥是否存在:
.read = "root.child('usersByUid').child(auth.uid).exists()"
一般来说,建议将用户存储在 uid
而不是其他键下。