Suche…


Bemerkungen

Die Echtzeitdatenbankregeln von Firebase bestimmen, wer Lese- und Schreibzugriff auf Ihre Datenbank hat, wie Ihre Daten strukturiert sind und welche Indizes vorhanden sind. Diese Regeln leben auf den Firebase-Servern und werden zu jeder Zeit automatisch durchgesetzt. Jede Lese- und Schreibanfrage wird nur ausgeführt, wenn Ihre Regeln dies zulassen. Standardmäßig sind Ihre Regeln so festgelegt, dass nur authentifizierte Benutzer vollen Lese- und Schreibzugriff auf Ihre Datenbank haben. Dies dient zum Schutz Ihrer Datenbank vor Missbrauch, bis Sie Zeit haben, Ihre Regeln anzupassen oder die Authentifizierung einzurichten.

Firebase-Datenbankregeln haben eine JavaScript-artige Syntax und es gibt vier Arten:

Geben Sie hier die Bildbeschreibung ein

Genehmigung

Die Identifizierung Ihres Benutzers ist nur ein Teil der Sicherheit. Sobald Sie wissen, wer sie sind, benötigen Sie eine Möglichkeit, den Zugriff auf die Daten in Ihrer Datenbank zu kontrollieren. Mit den Firebase-Datenbankregeln können Sie den Zugriff für jeden Benutzer steuern. Hier sind zum Beispiel Sicherheitsregeln, die es jedem erlauben, den Pfad /foo/ zu lesen, aber niemand, der darauf schreiben kann:

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

.read und .write Regeln kaskadieren, so dass dieser Regelsatz Lesezugriff auf alle Daten unter Pfad / foo / sowie auf tiefere Pfade wie /foo/bar/baz gewährt. Beachten Sie, dass .read und .write Regeln, die den Zugriff zulassen, andere Regeln in der Datenbank überschreiben, die keinen Zugriff zulassen. Mit anderen Worten, alle anwendbaren Regeln .read und .write werden zusammen .write verknüpft. Lesezugriff auf /foo/bar/baz würde also in diesem Beispiel auch dann gewährt, wenn eine Regel im Pfad /foo/bar/baz als falsch ausgewertet wird.

Die Firebase-Datenbankregeln enthalten integrierte Variablen und Funktionen, mit denen Sie auf andere Pfade, serverseitige Zeitstempel, Authentifizierungsinformationen usw. zugreifen können. Hier ein Beispiel für eine Regel, die authentifizierten Benutzern Schreibzugriff auf /users/<uid>/ . Dabei handelt es sich um die ID des Benutzers, die über die Firebase-Authentifizierung abgerufen wird.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Datenvalidierung

Die Firebase-Echtzeitdatenbank ist ein Schema. Dies macht es einfach, die Dinge während der Entwicklung zu ändern. Sobald Ihre App jedoch bereit ist zu verteilen, ist es wichtig, dass die Daten konsistent bleiben. Die .validate enthält eine .validate Regel, mit der Sie die Validierungslogik mit den gleichen Ausdrücken wie .read und .write Regeln .write . Der einzige Unterschied besteht darin, dass alle relevanten Validierungsregeln auf true ausgewertet werden müssen, damit das Schreiben zulässig ist (mit anderen Worten, alle anwendbaren .validate Regeln werden UND-verknüpft, um ein Datenbankschreiben zu ermöglichen.

Diese Regel erzwingt, dass Daten, die in /foo/ geschrieben werden, aus weniger als 100 Zeichen bestehen müssen:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

Überprüfungsregeln haben Zugriff auf dieselben integrierten Funktionen und Variablen wie die Regeln .read und .write . Sie können diese verwenden, um Validierungsregeln zu erstellen, die Daten an anderer Stelle in Ihrer Datenbank, die Identität Ihres Benutzers, die Serverzeit und vieles mehr kennen.

Datenbankindizes definieren

Die Firebase-Echtzeitdatenbank ermöglicht das Sortieren und Abfragen von Daten. Bei kleinen Datengrößen unterstützt die Datenbank Ad-hoc-Abfragen, sodass während der Entwicklung im Allgemeinen keine Indizes erforderlich sind. Bevor Sie jedoch Ihre App starten, müssen Sie unbedingt Indizes für alle Abfragen angeben, um sicherzustellen, dass sie mit dem Wachstum Ihrer App weiter funktionieren.

Indizes werden mit der Regel .indexOn angegeben. Hier ist ein Beispiel für eine Indexdeklaration, die die Höhen- und Längenfelder für eine Liste von Dinosauriern indizieren würde:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow