2016-10-21 1 views
1

Ich habe diese Datenstruktur.Firebase-Datenbankregeln. Wie man einen Knoten davon sichert, mit .set (Null) Anruf gelöscht zu werden

root 
    -foo 
     -key0 
      -bar1:baz1 
      -bar2:baz2 
     -key1 
      -bar1:baz1 
      -bar2:baz2 

Und ich habe diese Regelstruktur.

"foo":{ 
    ".read":true, 
    ".write":"auth != null", 
    ".validate":"newData.hasChildren(['bar1', 'bar2'])" 
} 

Aber wenn ich diese firebase.database().ref('/foo').remove() oder diesen firebase.database().ref('/foo').set(null); auf der JavaScript-Konsole zu tun versucht, die .validate auf Regeln nicht eingehalten werden und die Daten auf dem foo Knoten gelöscht wird.

Kann ich Datenbankknoten sichern, die keinem bestimmten Benutzer zugeordnet sind?

Antwort

2

Um zu verhindern, /foo von entfernt werden, können Sie überprüfen, ob newData.val() nicht null ist:

"foo": { 
    ... 
    ".write": "(auth != null) && (newData.val() != null)", 
    ... 
} 
+0

Also werde ich nicht ".validate" '? – CENT1PEDE

+0

Es hat funktioniert, aber ist es nicht komisch? Oder bin ich der Einzige, der merkwürdig denkt, dass dieser Ansatz seltsam ist? – CENT1PEDE

+0

Wie auch immer, danke! :) – CENT1PEDE

2

Validierungsschritt vollständig übersprungen, da Schreib erlaubt war.

Hinweis: Die .validate Regeln nur dann ausgewertet werden für Nicht-Null-Werte und nicht Kaskade.

Lesen Sie den folgenden Abschnitt mit einem sehr nützlichen Video aus der Firebase-Dokumentation zum Sichern Ihrer Daten.

https://firebase.google.com/docs/database/security/

sollten Sie Ihre Regeln ändern.

"foo":{ 
    ".read":true, 
    ".write":"auth != null && newData.exists()", 
    ".validate":"newData.hasChildren(['bar1', 'bar2'])" 
} 
Verwandte Themen