Sicherheitsregeln für Pipelinevorgänge

Das primäre Ziel der Unterstützung von Pipeline-Abfrageregeln besteht darin, die Filterfunktionen der vorhandenen Regel-Engine zu erreichen. Pipeline-Abfragen bieten zwar eine Vielzahl von Funktionen, die Rules Engine ist jedoch auf die Erkennung einfacher Filter beschränkt, um die Erfüllbarkeit und Sicherheit von Abfragen zu gewährleisten.

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 und den Abfragekontext zu validieren. 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), wendet die Rules Engine nach dieser Phase keine Filterbeschränkungen mehr an.
  • Literale-Phase: In der literals()-Phase 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.