So aktualisieren Sie ein Dokument teilweise in Cloud Firestore

Es wird ein Szenario geben, in dem Sie ein Dokument in Cloud Firestore teilweise aktualisieren möchten, ohne die Sicherheitsregeln zu gefährden.

Angenommen, Sie haben eine Bestellsammlung und einen angemeldeten Benutzer mit einer Benutzerrolle, der ein neues Bestelldokument in dieser Sammlung erstellen kann, wie im Screenshot unten.

Benutzerrolle

Die READ- und WRITE-Sicherheitsregeln für den Zugriff auf die Auftragssammlung für einen Benutzer würden wie folgt aussehen:

REGEL SCHREIBEN

match /orders/{ordersId} {
      allow write: if
           request.auth.uid != null && request.auth.token.isUser == true
}

Die obige Sicherheitsregel ermöglicht es einem Benutzer, ein neues Dokument zu erstellen, wenn er/sie angemeldet ist und die Benutzerrolle isUser ist.

An dieser Stelle fragen Sie sich vielleicht, woher die isUser-Rolle kommt?

Es gibt verschiedene Möglichkeiten, Benutzerrollen in Firebase zu erstellen. Ich verwende Authentifizierungsansprüche, um Rollen über Cloud Functions zu erstellen.

Weitere Informationen zu diesem Thema finden Sie in meinem anderen Artikel, in dem ausführlich beschrieben wird, wie Benutzerrollen mithilfe von Auth-Ansprüchen erstellt werden.

LESEREGEL, damit ein Benutzer auf seine eigenen Bestellungen zugreifen kann, nicht auf andere.

match /orders/{ordersId} {
      allow write: if
           request.auth.uid == resource.data.user.uid && request.auth.token.isUser == true
}

Die obige Sicherheitsregel ermöglicht es Benutzern, Bestellungen zu erhalten, wenn die UID des angemeldeten Benutzers mit der UID übereinstimmt, die sich im Benutzerfeld im Bestelldokument befindet, wie im folgenden Screenshot.

Die Sicherheitsregel prüft auch, ob der angemeldete Benutzer eine isUser-Rolle hat.

Das ist ziemlich einfach.

Fahrerrolle

Wie Sie auf dem Auftragsbild unten sehen können, habe ich dem Auftrag einen Fahrer zugewiesen, sobald er erstellt wurde. Ich habe es zu Demonstrationszwecken so gemacht.

In der realen Welt müssen Sie einen Fahrer zuweisen, nachdem die Bestellung über das Admin-Panel aufgegeben wurde, oder indem Sie eine Bestellbenachrichtigung an die verfügbaren Fahrer senden, um die Bestellung anzunehmen, bevor die Bestellung aufgegeben wird, und sie dann dem Bestelldokument hinzufügen.

Wenn ein Fahrer dem Auftrag zugewiesen wird, muss er/sie auf bestimmte Informationen im Auftrag zugreifen, z. B. den Namen des Geschäfts, die Adresse des Geschäfts, die Benutzeradresse usw.

Geben wir also den READ-Zugriff auf die Bestellung, der der Fahrer zugewiesen ist.

match /orders/{ordersId} {
      allow read: if
           request.auth.uid == resource.data.driver.uid && request.auth.token.isDriver == true
}

Das ist gut.

Jetzt kann der Benutzer seinen eigenen Auftrag LESEN und SCHREIBEN und der Fahrer kann nur das Auftragsdokument LESEN.

Schön.

Auftragsstatus

Nun möchte ich dem Benutzer den Bestellstatus mitteilen, während der Fahrer mit seiner Bestellung fortfährt, z. B. Essen geholt, geliefert usw.

Lesen Sie weiter...