2016-05-30 8 views
0

Ich baue eine Anwendung, mit der Benutzer ihre Arbeitszeiten stempeln können. Auf meiner Anwendung sind 2 Arten von Benutzern. Einer von ihnen ist der "Angestellte", der nur Lesezugriff hat und der andere ist der "Administrator", der Lese- und Schreibzugriff hat. Die Mitarbeiter dürfen ihre eigenen Arbeitszeiten lesen und die Admins dürfen für jeden Benutzer/Mitarbeiter neue Benutzer anlegen oder Arbeitszeiten hinzufügen.Firebase 3.0 Sicherheitsregeln - Lassen Sie keine anonymen Kinder schieben

Der Administrator füllt das Formular und drückt die Daten. Auf Firebase habe ich überprüft, ob der Benutzer authentifiziert ist und auch eine Validierung für jede Eigenschaft des Benutzerobjekts ausgeführt. Aber ich frage mich, was ist, wenn jemand meine Firebase-URL kopiert (die im Quellcode sichtbar sind) und versucht, einige anonyme Objekte oder Eigenschaften in meine Datenbank zu schieben?

Zum Beispiel habe ich SignUp Form, die diese Felder erfordert:

{ 
    "users": { 
     "-KInd4V0V9k5n6yhAETd": { 
     "uid": "-KInd4V0V9k5n6yhAETd", 
     "username": "Haris", 
     "password": "HelloWolrd123", 
     "age":  "21" 
     } 
    } 
} 

Auf der firebas Seite habe ich mit der newData Methode geprüft, ob die Kinder aus der Form übergeben werden:

".validate": "newData.hasChildren(['uid','username','password,'age'])" 

ich habe lief bereits eine Validierung für jede Eigenschaft, die usw., wenn die Daten gültig sind prüft wie username.isString()

was also, wenn ein Administrator mit dem Entwickler zu einem Benutzerobjekt drückt ole wie diese auf meine Datenbank (E-Mail-Eigenschaft hinzugefügt)

{ 
    "-KInd4V0VEEEEEEEE": { 
     "uid": "-KInd4V0VEEEEEEEE", 
     "username": "Haris", 
     "password": "HelloWolrd123", 
     "age":  "21", 

     // anonymous Object pushed from n admin developer-console 
      "email": "[email protected]" 
     } 
} 

Dies funktioniert, weil alle erforderlichen Felder gültig und die Validierung weitergegeben Feuerbasis sind. Aber wie kann ich verleugnen, dass ein Admin kann nicht hinzufügen und übergeben Sie die E-Mail-Eigenschaft zu meiner firebase-Datenbank? Weil meine Benutzerobjektstruktur auf der Datenbank keine E-Mail-Eigenschaft hat. Ich will nicht zulassen, dass ein Benutzer seine anonymen Objekte/Daten in meine Datenbank schieben kann. Muss ich jede Eigenschaft validieren oder gibt es eine Methode, mit der ich das Objekt selbst validieren kann? Wie newData ('Benutzer') isValid()? Und wenn eine Eigenschaft angehängt ist, gibt isValid false zurück, weil die Objekte nicht wie in der Datenbankstruktur sind?

Antwort

2

Ich bin mir nicht ganz sicher, aber ich denke, Sie suchen nach einer Regel, die alle anderen Kinder zurückweist. Wenn das ist in der Tat, was Sie suchen, dann:

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     // Valid users have these properties 
     ".validate": "newData.hasChildren(['uid','username','password,'age'])", 
     // The uid property must be a string and refer to an existing noder under /users 
     "uid": { 
      ".validate": "newData.isString() && root.child('users').child(newData.val()).exists()" 
     }, 
     // the user name must be a string 
     "username: { 
      ".validate": "newData.isString()" 
     }, 
     "password: { 
      // I really hope you're not storing a password 
     }, 
     "age: { 
      // TODO: you're storing age as a string now, might want to fix that 
      ".validate": "newData.isNumber()" 
     }, 
     // All other properties are rejected 
     "$other": { 
      ".validate": false 
     } 
     } 
    } 
    } 
} 
+0

Danke Frank! Das war genau das, wonach ich suchte. –

Verwandte Themen