我正在尝试通过基于Twitter登录生成的uid在Firebase中手动输入管理员来创建应用程序管理员。我想知道如何在节点下的所有子代中搜索特定的uid以指定r / w访问权限。
我有以下
{
"GRP1" : {
"ORG1" : {
"CONF1" : {
"TEAM1" : {
"ADMINS" : {
"Name1" : {
"uid" : "abcd1239"
},
"Name2" : {
"uid" : "abcf1234"
}
},
"FEED" : {
"Store1" : {
"info1" : "some text"
},
"Store2" : {
"info2" : "some other text"
}
}
}
}
}
}
}
我想基于ADMINS中是否存在uid来提供对FEED的读/写访问。该规则有效:
".read" : "root.child('GRP1').child('ORG1').child('CONF1').child('TEAM1').child('ADMINS').child('Name1').child('uid').val() === auth.uid"
但是,如果我拥有可变数量的ADMINS,该如何搜索所有的'uid'?我尝试输入子名称作为uid,然后搜索以查看是否存在,但读取无效:
".read" : "root.child('GRP1').child('ORG1').child('CONF1').child('TEAM1').child('ADMINS').child(auth.uid).exists()"
您无法在安全规则中跨节点搜索,因为那样就无法扩展。这意味着,如果要检查JSON中某个位置是否存在UID,则必须将该UID作为节点的键。
因此,您的JSON将是:
{
"GRP1" : {
"ORG1" : {
"CONF1" : {
"TEAM1" : {
"ADMINUIDS" : {
"abcd1239": "Name1",
"abcf1234": "Name2"
}
现在,您可以使用以下命令检查是否存在UID:
".read" : "root.child('GRP1/ORG1/CONF1/TEAM1/ADMINUIDS').child(auth.uid).exists()"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句