【问题标题】:Using newData on Updates in Firebase Security Rules在 Firebase 安全规则的更新中使用 newData
【发布时间】:2019-01-22 01:07:10
【问题描述】:

我在执行更新操作时在 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 子项中删除“videos”和 $videoId ("-1vidid) 时,这里有更多尝试:

知道为什么 newData 似乎没有进行更新吗?

【问题讨论】:

  • 请编辑问题以显示规则。
  • 添加了更多信息
  • 您的规则难以阅读。缩进不一致,很难分辨花括号在哪里排列。
  • 模拟结果截图(包括通过和失败的规则)是不是更容易阅读?
  • 没有规则看(带行号),截图意义不大。规则可以跨越多行,如果没有上下文,就无法说出您要完成的任务。

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


【解决方案1】:

您的相关规则:

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

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

我假设您想从根目录开始阅读。在这种情况下,您可以使用root,它会为您提供根目录中的现有数据,或者使用newData.parent().parent()...(无论您需要多少级重复)来获取更新的数据。

【讨论】:

  • 就是这样,修复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2020-06-19
  • 2016-03-26
  • 2021-07-14
  • 2016-06-27
  • 1970-01-01
相关资源
最近更新 更多