2016-08-14 2 views
2

Ich bin neu in Firebase und ich möchte wissen, wie man eine Frage in Bezug auf hasChildren() RuleDataSnapshot und wie validates die Daten erstellt werden.Vermeiden Sie zusätzliche Kinder Firebase

Probe von db:

{ 
    "visitors" : { 

    "-KP4BiB4c-7BwHwdsfuK" : { 
     "mail" : "[email protected]", 
     "name" : "aaa", 
    } 
    ..... 
} 

Regeln:

{ 
    "rules": { 
     "visitors": { 
      ".read": "auth != null", 
      ".write": "auth.uid != null", 
       "$unique-id": { 
        ".read": "auth != null ", 
        ".write": "auth != null", 
        ".validate": "newData.hasChildren(['name','mail'])", 
      } 
     } 

    } 
} 

Was weiß ich, wenn ich Daten erstellen möchten, die Datenfelder die gleichen Namen haben muss die Regel Validierung passieren. Zum Beispiel: Wenn ich "Name" pro "Namen" ändere und ich versuche, einen neuen Knoten mit ihren Kindern zu erstellen, funktioniert die Regel soweit ich das verstehen konnte. Ich frage mich was passiert, wenn ich manuell ein neues Feld hinzufüge um es zu erstellen?

Zum Beispiel:

//Add extra fields which are not actually present 
var data = {name : "xxx",mail:"[email protected]",extra1:222,extra:333}; 
firebase.database().ref('visitors/').push(data); 

Das Ergebnis ist:

"visitors" : { 
    "-KP4BiB4c-7BwHwdsfuK" : { 
     "mail" : "[email protected]", 
     "name" : "juan", 
    "extra1":222, 
     "extra2":333 
    } 
} 

Also meine Frage ist, wie pro Knoten zusätzlichen Childs zu vermeiden erstellen? Ich nahm an, die Regel hat es getan.

Vielen Dank im Voraus.

Antwort

6

Ihre Validierungsregel besagt, dass Ihr Beitrag atleast diese Kinder und nicht nur diese Kinder haben muss.

{ 
    "rules": { 
    "visitors": { 
     ".read": "auth != null", 
     ".write": "auth.uid != null", 
     "$unique-id": { 
      ".read": "auth != null ", 
      ".write": "auth != null", 
      //This line says the new data must have ATLEAST these children 
      ".validate": "newData.hasChildren(['name','mail'])", 
      //You can add individual validation for name and mail here  
      "name": { ".validate": true }, 
      "mail": { ".validate": true }, 
      //This rule prevents validation of data with more child than defined in the 2 lines above (or more if you specify more children) 
      "$other": { ".validate": false } 
     } 
    } 
    } 
} 

einen Blick here für ein anderes Beispiel: Um keine weiteren Kinder zu gewährleisten können Sie die folgenden, um Ihre Regeln hinzufügen müssen hinzugefügt werden.

Verwandte Themen