我需要在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)中检索数据。
答案 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.uid
将root.child()
与uid
下相应节点的a
相匹配。
结果是,只有在b
下具有相同密钥的相应子级的uid
与当前用户匹配时,才会向a
下的子级授予读取权限。 s uid
。