在Firebase规则中正确使用“新数据”

在Firebase规则中正确使用“新数据”,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,是否有人能就在Firebase规则中使用“新数据”的正确方式提供指导?我意识到它不能用于“.read”,原因很明显,但我也注意到,提供的示例总是在验证规则中使用“newData”。例如,在“HasChildPath”下,谷歌的指南显示: ".validate": "newData.hasChild('name')" 我还从GitHub找到了这个。我发现这在研究如何将健壮的规则组合在一起时也非常有用。不过我注意到,“newData”主要在“validate”下使用,很少与“write”一起使用。

是否有人能就在Firebase规则中使用“新数据”的正确方式提供指导?我意识到它不能用于“.read”,原因很明显,但我也注意到,提供的示例总是在验证规则中使用“newData”。例如,在“HasChildPath”下,谷歌的指南显示:

".validate": "newData.hasChild('name')"
我还从GitHub找到了这个。我发现这在研究如何将健壮的规则组合在一起时也非常有用。不过我注意到,“newData”主要在“validate”下使用,很少与“write”一起使用。我发现的唯一一个使用“写入”规则的“newData”示例来自第二个链接

".write": "!newData.exists()"
我不知道这是否有原因。在“写入”规则中如何使用“新数据”是否存在限制?例如,以下各项是否始终有效?我的实验表明没有,但也许我错过了什么

".write": "newData.hasChild('name')"
这里是消防队

newData变量可用,可与.write和.validate规则一起有效使用。如果你在你的写作规则中有一个很好的用例,那就去吧

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


。另一方面,验证规则用于验证新数据的结构是否符合应用程序的要求,以及是否允许使用这些值。因此,新数据在这里的使用更加普遍。

谢谢Frank。你的回答排除了一些问题。我对这件事困惑了一段时间。关于使用{.write}作为权限,您是对的。我一直在寻找一种方法,将新的数据条目与允许发布公告的用户列表进行比较。规则类似于{.write:root.child'public.childnewData.child'user.val.exists}。如果您在代码运行方面遇到问题,请在您的问题中包括用例和问题。在本例中,应该包含一个实际JSON片段作为文本,没有屏幕截图,您可以通过单击.Ok中的导出JSON链接来获得。我认为这个问题仍然有效,尽管我试图让问题尽可能简单。我发现的示例似乎没有太多地使用newData.write,所以我想知道是否有任何主要限制。JSON非常简单:public:{user1:true}