2017-10-08 4 views
0

Kann jemand Anleitung zur korrekten Verwendung von 'newData' in Firebase-Regeln geben? Ich weiß, dass es nicht für '.read' verwendet werden kann (aus offensichtlichen Gründen), aber ich habe auch bemerkt, dass die Beispiele, die von Google bereitgestellt werden, immer "newData" innerhalb der Validierungsregeln verwenden. Zum Beispiel unter 'hasChild (ChildPath)', Googles Anleitung zeigt:ordnungsgemäße Verwendung von 'newData' in Firebase-Regeln

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

Ich habe auch diesen von GitHub gefunden. Ich fand das auch sehr hilfreich, wenn es darum geht, robuste Regeln zusammenzusetzen. Mir ist aufgefallen, dass 'newData' meistens unter 'validate' und selten mit 'write' verwendet wird. Der einzige ‚newData‘ Beispiel, das ich mit ‚write‘ Regeln gefunden habe, ist aus dem zweiten Link

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

Ich frage mich, ob es einen Grund dafür ist. Gibt es Einschränkungen, wie 'newData' innerhalb von 'write'-Regeln verwendet werden kann? Zum Beispiel, wird das Folgende immer funktionieren? Meine Experimente deuten darauf hin, dass es nicht ist, aber vielleicht habe ich etwas verpasst.

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

Antwort

1

firebaser hier

Die newData Variable zur Verfügung und kann mit .write und .validate Regeln effektiv verwendet werden. Wenn Sie in Ihren Schreibregeln einen guten Anwendungsfall dafür haben, gehen Sie darauf zu!

Normalerweise verwende ich .write Regeln, um sicherzustellen, dass der Benutzer die Berechtigung zum Schreiben auf den Speicherort hat. Diese Berechtigung hängt in der Regel nicht von den neuen Daten ab, sondern von den neuen Daten, die auf der anderen Seite verwendet werden, um zu bestätigen, dass die neuen Daten so strukturiert sind, wie es Ihre App erfordert und dass die Werte erlaubt sind. Also die häufigere Verwendung von newData hier.

+0

Danke Frank. Ihre Antwort schließt einige Probleme aus. Ich habe mich schon eine Weile über dieses Thema lustig gemacht. Sie haben recht, wenn Sie {.write} für Berechtigungen verwenden. Ich habe nach einer Möglichkeit gesucht, einen neuen Dateneintrag mit einer Liste von Benutzern zu vergleichen, die eine öffentliche Ankündigung vornehmen dürfen. Die Regel sieht ungefähr so ​​aus {{.write: "root.child ('public'). Child (newData.child ('user'). Val()). Exists()"}. Irgendwelche Tipps zur Fehlerbehebung? –

+0

Wenn Sie Probleme mit Ihrem Code haben, fügen Sie bitte den Use-Case und den [minimalen Code, der Ihre Probleme reproduziert] (http://stackoverflow.com/help/mcve) in Ihre Frage ein. In diesem Fall sollte ein Ausschnitt des eigentlichen JSON (als Text, keine Screenshots) enthalten sein, den Sie durch Klicken auf den Link "JSON exportieren" in Ihrer [Firebase-Datenbankkonsole] (https://console.firebase.google. com/projekt/_/datenbank/daten). –

+0

Ok. Ich denke, die Frage ist immer noch gültig, da ich versuche, die Probleme so einfach wie möglich zu halten. Die Beispiele, die ich gefunden habe, scheinen newData nicht viel für .write zu verwenden, also habe ich mich gefragt, ob es irgendwelche größeren Einschränkungen gibt. Der JSON ist sehr einfach: "public": { "user1": true}} –

Verwandte Themen