在Firebase安全规则中的更新上使用newData

时间:2019-01-22 01:07:10

标签: firebase firebase-realtime-database firebase-security-rules

在执行更新操作时,在Firebase安全规则中使用newData时遇到问题。

这是我的数据结构:

enter image description here

这是我的规则:

{
  "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时失败的规则;

enter image description here

请注意,当我在令牌(“ testTok”)中进行硬编码时,它可以工作,但是当我尝试使用newData时,它将无法清除。

当我从newData子级中删除“视频”和$ videoId(“-1vidid”)时,还有更多尝试:

enter image description here

enter image description here

任何想法为何newData似乎都无法进行更新?

1 个答案:

答案 0 :(得分:1)

您的相关规则:

root.child('videos/' + $videoId + '/tokens/' + newData.child('/videos/-1vidid/requestToken').val() + '/read' ).exists()"

newData变量引用当前位置的新数据。在您定义规则的位置下没有子/videos

我假设您想从根开始阅读。在这种情况下,您可以使用root(在根目录提供现有数据),也可以使用newData.parent().parent()...(无论您需要进行多少级别的重复操作)以获取更新的数据。

相关问题