【问题标题】:proper use of 'newData' in Firebase rules在 Firebase 规则中正确使用“newData”
【发布时间】:2017-10-09 01:05:22
【问题描述】:

谁能提供有关在 Firebase 规则中使用“newData”的正确方法的指导?我意识到它不能用于“.read”(原因很明显),但我也注意到Google 提供的示例总是在验证规则中使用“newData”。例如,在“hasChild(childPath)”下,Google 的指南显示:

".validate": "newData.hasChild('name')"

我还从 GitHub 找到了这个 other link。在研究如何将强大的规则组合在一起时,我发现这也很有帮助。我注意到虽然“newData”主要在“验证”下使用,但很少与“写入”一起使用。我发现的唯一带有“写入”规则的“newData”示例来自第二个链接

".write": "!newData.exists()"

我想知道这是否有原因。在“写入”规则中如何使用“newData”是否有限制?例如,以下是否总是有效?我的实验表明它没有,但也许我错过了一些东西。

".write": "newData.hasChild('name')"

【问题讨论】:

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


    【解决方案1】:

    firebaser 在这里

    newData 变量可用并且可以有效地与.write.validate 规则一起使用。如果您在编写规则中有一个很好的用例,那就去吧!

    我通常使用.write 规则来确保用户具有写入该位置的适当权限。该权限通常不取决于新数据,而纯粹取决于位置和其他地方的现有数据

    另一方面,.validate 规则用于验证新数据的结构是否符合您的应用程序要求以及允许的值。因此,newData 在这里更常见的用法。

    【讨论】:

    • 谢谢弗兰克。您的回答排除了一些问题。我一直在为这个困惑一段时间。您使用 {.write} 获取权限是正确的。我一直在寻找一种将新数据条目与允许发布公告的用户列表进行比较的方法。规则看起来像这样 {".write": "root.child('public').child(newData.child('user').val()).exists()"}。任何提示如何解决更多问题?
    • 如果您在编写代码时遇到问题,请在您的问题中包含用例和minimal code that reproduces where you're stuck。在这种情况下,它应该包含实际 JSON 的 sn-p(作为文本,没有屏幕截图),您可以通过单击 Firebase Database console 中的“导出 JSON”链接来获取它。
    • 好的。我认为这个问题仍然有效,因为我试图让问题尽可能简单。我发现的示例似乎并没有将 newData 用于 .write,所以我想知道是否有任何重大限制。 JSON 非常简单: "public" : { "user1" : true }}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多