Firebase 规则:如何在一个节点的所有 children 中搜索一个值?
Firebase Rules: How to search all children of a node for a value?
我正在尝试通过基于他们的 Twitter 登录生成的 uid 在 Firebase 中手动输入他们来为应用程序创建管理员。我想知道如何在节点下的所有 children 中搜索特定的 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 来提供 r/w 对 FEED 的访问。此规则有效:
".read" : "root.child('GRP1').child('ORG1').child('CONF1').child('TEAM1').child('ADMINS').child('Name1').child('uid').val() === auth.uid"
但是如果我有可变数量的 ADMINS,我该如何搜索所有 'uid'?我尝试输入 child 名称作为 uid,然后搜索它是否存在但读取不起作用:
".read" : "root.child('GRP1').child('ORG1').child('CONF1').child('TEAM1').child('ADMINS').child(auth.uid).exists()"
您无法在安全规则中跨节点搜索,因为那样无法扩展。这意味着如果你想检查UID是否存在于你的某个地方JSON,你必须有那个UID作为节点的键。
所以你的 JSON 将是:
{
"GRP1" : {
"ORG1" : {
"CONF1" : {
"TEAM1" : {
"ADMINUIDS" : {
"abcd1239": "Name1",
"abcf1234": "Name2"
}
现在您可以使用以下方法检查 UID 是否存在:
".read" : "root.child('GRP1/ORG1/CONF1/TEAM1/ADMINUIDS').child(auth.uid).exists()"
我正在尝试通过基于他们的 Twitter 登录生成的 uid 在 Firebase 中手动输入他们来为应用程序创建管理员。我想知道如何在节点下的所有 children 中搜索特定的 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 来提供 r/w 对 FEED 的访问。此规则有效:
".read" : "root.child('GRP1').child('ORG1').child('CONF1').child('TEAM1').child('ADMINS').child('Name1').child('uid').val() === auth.uid"
但是如果我有可变数量的 ADMINS,我该如何搜索所有 'uid'?我尝试输入 child 名称作为 uid,然后搜索它是否存在但读取不起作用:
".read" : "root.child('GRP1').child('ORG1').child('CONF1').child('TEAM1').child('ADMINS').child(auth.uid).exists()"
您无法在安全规则中跨节点搜索,因为那样无法扩展。这意味着如果你想检查UID是否存在于你的某个地方JSON,你必须有那个UID作为节点的键。
所以你的 JSON 将是:
{
"GRP1" : {
"ORG1" : {
"CONF1" : {
"TEAM1" : {
"ADMINUIDS" : {
"abcd1239": "Name1",
"abcf1234": "Name2"
}
现在您可以使用以下方法检查 UID 是否存在:
".read" : "root.child('GRP1/ORG1/CONF1/TEAM1/ADMINUIDS').child(auth.uid).exists()"