2017-10-08 40 views
0

任何人都可以提供有关在Firebase规则中使用'newData'的正确方法的指导吗?我意识到它不能用于'.read'(出于显而易见的原因),但我也注意到由Google提供的示例总是在验证规则中使用'newData'。例如,在 'hasChild(childPath)',谷歌的指南表明:正确使用Firebase规则中的'newData'

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

我还发现这从GitHub。在研究如何将强大的规则放在一起时,我发现这也非常有帮助。我注意到,'newData'主要用于'validate'下,很少用'write'。我用'写'规则找到的唯一'newData'示例来自第二个链接

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

我不知道是否有这个原因。 “写入”规则中如何使用'newData'有没有限制?例如,下面的工作总是会起作用吗?我的实验表明它没有,但也许我错过了一些东西。

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

回答

1

这里

newData变量是可用的,并且可以有效地与.write.validate规则使用firebaser。如果你的写规则有一个很好的用例,那就去做吧!

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

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

+0

谢谢弗兰克。你的回答排除了一些问题。我一直在困惑这一段时间。您对使用{.write}进行权限是正确的。我一直在寻找一种方法来比较新的数据录入和允许公开发布的用户列表。规则看起来像这样{“.write”:“root.child('public')。child(newData.child('user').val())。exists()”}。任何提示如何排除故障多一点? –

+0

如果您在编写代码时遇到问题,请在您的问题中包含用例和[重现您卡住的最小代码](http://stackoverflow.com/help/mcve)。在这种情况下,应该包含实际JSON的片段(如文本,没有截图),您可以通过点击[Firebase数据库控制台](https://console.firebase.google。)中的“导出JSON”链接获得该片段。 COM /项目/ _ /数据库/数据)。 –

+0

好的。我认为这个问题仍然有效,尽管我试图尽可能简化问题。我发现的例子似乎并没有将newData用于.write,所以我想知道是否有任何主要的限制。 JSON非常简单:“public”:{ “user1”:true}} –