Json Firebase中的$variables
最近:这里是一个JSON规则树:Json Firebase中的$variables,json,firebase,firebase-realtime-database,firebase-security,Json,Firebase,Firebase Realtime Database,Firebase Security,最近:这里是一个JSON规则树: { "rules": { "Leaders":{ "$leaderuid": { ".write": "$leaderuid == auth.uid", "DATA": { ".write": "data.parent().child('ALLOWED').child(auth.uid).exists()" } } } } } 实际数据
{
"rules": {
"Leaders":{
"$leaderuid": {
".write": "$leaderuid == auth.uid",
"DATA": {
".write": "data.parent().child('ALLOWED').child(auth.uid).exists()"
}
}
}
}
}
实际数据库
{
"Leaders" : {
"A" : {
"ALLOWED" : {
"b" : 0,
"c" : 0,
"d" : 0
},
"DATA" : {
"blah blah1" : "content writable by bcd",
"blah blah2" : "content writable by bcd"
},
"REQUESTS" : {
"E" : 0
}
}
}
}
我只是想帮助理解$leaderuid
的含义。我已经阅读了文档,这是一个临时变量
我有一个想法,请纠正我或告诉我我的想法是否正确
创建的临时变量
$leaderuid
是创建的leader的authUID $variable具有节点所具有的您所处的任何键。因此,如果您有以下结构:
{
"Leaders" : {
"A" : {
...
},
"B": {
...
}
}
}
在A
下评估您的安全规则时,$leaderuid
将是A
。但是,当在B
下评估规则时,$leaderuid
将是B
$变量的名称并不重要。但是,因为您似乎保存了一个领导者列表,并且您说您将其存储在他们的UID下,所以我在前面的回答中将变量命名为$leaderuid
这在本手册中有介绍。在那里和文档的其余部分花上几个小时,应该可以回答您可能遇到的许多问题。该$variable具有节点所具有的任何键。因此,如果您有以下结构:
{
"Leaders" : {
"A" : {
...
},
"B": {
...
}
}
}
在A
下评估您的安全规则时,$leaderuid
将是A
。但是,当在B
下评估规则时,$leaderuid
将是B
$变量的名称并不重要。但是,因为您似乎保存了一个领导者列表,并且您说您将其存储在他们的UID下,所以我在前面的回答中将变量命名为$leaderuid
这在本手册中有介绍。在那里和文档的其余部分花上几个小时,应该可以回答您可能遇到的许多问题。这只是Leader Node下动态键的占位符这只是Leader Node下动态键的占位符!我更了解这一点。不过有一个问题。Firebase将如何检查第一个是UID还是第二个或第三个。。。。?本质上,$变量是否创建递归,在其中检查所有$LeaderUID并检查当前id是否与其中任何一个匹配?规则始终在JSON树中实际节点的上下文中进行计算。当您在规则中使用变量(例如
$leaderuid==auth.uid
)时,服务器将从该上下文节点向上搜索,直到找到您声明变量的位置并使用该键。但老实说,当开始在数据库控制台中使用规则模拟器时,这很难解释,也很容易使用。谢谢!我更了解这一点。不过有一个问题。Firebase将如何检查第一个是UID还是第二个或第三个。。。。?本质上,$变量是否创建递归,在其中检查所有$LeaderUID并检查当前id是否与其中任何一个匹配?规则始终在JSON树中实际节点的上下文中进行计算。当您在规则中使用变量(例如$leaderuid==auth.uid
)时,服务器将从该上下文节点向上搜索,直到找到您声明变量的位置并使用该键。但老实说,当开始在数据库控制台中使用规则模拟器时,这很难解释,也更容易使用。