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 Phasencollection(),collectionGroup()unddatabase()ausgelöst.allow get-Berechtigungen: Werden durch diedocuments()-Phase ausgelöst, die ähnlich wie einget-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.