在执行更新操作时,在Firebase安全规则中使用newData时遇到问题。
这是我的数据结构:
这是我的规则:
{
"rules": {
"videos": {
"$videoId": {
"data": {
"content": {
"srcURL": {
".write": "root.child('videos/' + $videoId + '/tokens/' + newData.child('/videos/-1vidid/requestToken').val() + '/read' ).exists()"
},
},
"meta": {
"status": {
".write": "root.child('videos/' + $videoId + '/tokens/testTok/read').exists()"
}
}
},
"requestToken": {
".write": true,
}
}
}
}
}
这是我要通过更新写入的数据:
{
"videos/-1vidid/data/meta/status": "uploaded",
"videos/-1vidid/data/content/srcURL": "https",
"videos/-1vidid/requestToken": "testTok"
}
这是我尝试使用newData时失败的规则;
请注意,当我在令牌(“ testTok”)中进行硬编码时,它可以工作,但是当我尝试使用newData时,它将无法清除。
当我从newData子级中删除“视频”和$ videoId(“-1vidid”)时,还有更多尝试:
任何想法为何newData似乎都无法进行更新?
答案 0 :(得分:1)
您的相关规则:
root.child('videos/' + $videoId + '/tokens/' + newData.child('/videos/-1vidid/requestToken').val() + '/read' ).exists()"
newData
变量引用当前位置的新数据。在您定义规则的位置下没有子/videos
。
我假设您想从根开始阅读。在这种情况下,您可以使用root
(在根目录提供现有数据),也可以使用newData.parent().parent()...
(无论您需要进行多少级别的重复操作)以获取更新的数据。>