Sicherheitsregeln für Pipelinevorgänge

Mit Pipeline-Vorgangsregeln können Sie die Filterfunktionen der vorhandenen Regel-Engine nutzen. Pipeline-Vorgänge bieten zwar eine Vielzahl von Funktionen, die Regelschnittstelle ist jedoch auf die Erkennung einfacher Filter beschränkt, um die Erfüllbarkeit und Sicherheit von Anfragen zu gewährleisten.

Anforderungen für Version und Modus

Dieses Dokument bezieht sich auf die Firestore Enterprise-Version im nativen Modus.

Unterstützte Filterausdrücke

Damit eine Abfrage durch Ihre Regeln eingeschränkt wird, müssen darin Standardvergleichsoperatoren für Konstanten verwendet werden. Die folgenden Filtertypen werden von der Regel-Engine erkannt:

  • Gleichheit und Ungleichheit: eq, neq.
  • Vergleiche: gt, gte, lt, lte.
  • Mitgliedschaft: in, arrayContains.

Hier einige Beispiele:

  • where(eq("foo", 2))
  • where(lt("foo", 2))
  • documents("/user/1", "/user/2").where(...)

Anfrage-Properties

Sie können das request-Objekt weiterhin verwenden, um die Authentifizierung zu validieren und den Kontext abzufragen. Einige Eigenschaften, die in Standardabfragen verfügbar sind, werden jedoch in Pipelines nicht unterstützt.

Unterstützte Eigenschaften

Die neue Engine unterstützt weiterhin die folgenden Eigenschaften:

  • request.auth: Auf Nutzer-UID und Tokendaten zugreifen.
  • request.method: Gibt den Vorgang an (z. B. get, list).
  • request.path: Der Pfad der Ressource, auf die zugegriffen wird.
  • request.time: Der serverseitige Zeitstempel der Anfrage.

Nicht unterstützte Properties

Die request.query-Eigenschaften wie limit, offset und orderBy werden für die Überprüfung von Pipelines-Regeln nicht unterstützt, da es schwierig ist, diese Werte in mehrstufigen Abfragen zu ermitteln.

Verarbeitung und Berechtigungen für Pipelinephasen

Es gibt verschiedene Pipelinestufen, die bestimmten detaillierten Vorgängen in Sicherheitsregeln zugeordnet werden:

  • allow list-Berechtigungen: Werden durch die Phasen collection(), collectionGroup() und database() ausgelöst.
  • allow get-Berechtigungen: Werden durch die documents()-Phase ausgelöst, die ähnlich wie ein get-Batchvorgang behandelt wird.
  • Phasen der Feldänderung: Regeln werden nur auf gespeicherte Daten angewendet, nicht auf abgeleitete Werte. Wenn eine Pipeline Phasen enthält, in denen Felder geändert werden (z. B. AddFields, ReplaceWith, Select), werden Filterbeschränkungen von der Rules Engine nicht mehr angewendet, sobald diese Phase erreicht wird.
  • Literale-Phase: In der Phase literals() werden keine Daten aus der Datenbank gelesen, es können aber Kosten anfallen. Um Missbrauch zu verhindern, muss sie mit einer anderen Phase (z. B. collection()) kombiniert werden, die durch Regeln überprüft werden kann.