$在火力地堡
最近I asked a question about Firebase permissions变量:这是一个规则JSON树:
{
"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
是创建的领导者的authUID?
$变量拥有节点所拥有的任何关键字。所以,如果你有以下结构:
{
"Leaders" : {
"A" : {
...
},
"B": {
...
}
}
}
当你的安全规则A
下进行评估,然后$leaderuid
会A
。但是当规则在B
下评估时,则$leaderuid
将为B
。
$变量的名称不重要。但是由于您似乎在保留领导者名单,并且您说您将他们存储在他们的UID下,所以我在之前的答案中将变量名称命名为$leaderuid
。
这包括在Firebase documentation on structuring data for securing user access。花费几个小时在那里和其他文档中,应该回答很多您可能遇到的问题。
谢谢!我更明白这一点。一个问题,但。 Firebase将如何检查第一个是UID还是第二个或第三个....?从本质上讲,$变量创建递归,它检查所有的$ leaderuids并检查当前的id是否匹配其中的任何一个? – DilllyBar
规则总是在JSON树中实际节点的上下文中进行评估。当您在规则中使用变量时(例如'$ leaderuid == auth.uid'),服务器将从该上下文节点向上搜索,直到找到声明变量的位置并使用该密钥。但说实话,在数据库控制台中使用规则模拟器开始播放时,这很难解释并且更容易使用。 –
它只是您的动态密钥的领导者节点 –