Règles de sécurité pour les opérations de pipeline

Les règles Opérations de pipeline vous permettent de faire correspondre les capacités de filtrage du moteur de règles existant. Bien que les opérations de pipeline offrent un ensemble de fonctionnalités riche, le moteur de règles est limité à la reconnaissance de filtres simples pour garantir la satisfiabilité et la sécurité des requêtes.

Édition et mode requis

Ce document s'applique à l'édition Enterprise de Firestore en mode natif.

Expressions de filtre acceptées

Pour qu'une requête soit limitée par vos règles, elle doit utiliser des opérateurs de comparaison standards par rapport à des constantes. Le moteur de règles reconnaît les types de filtres suivants :

  • Égalité et inégalité : eq, neq.
  • Comparaisons : gt, gte, lt, lte.
  • Abonnement : in, arrayContains.

Voici quelques exemples :

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

Propriétés de la requête

Vous pouvez continuer à utiliser l'objet request pour valider l'authentification et interroger le contexte, même si certaines propriétés disponibles dans les requêtes standards ne sont pas compatibles avec les pipelines.

Propriétés acceptées

Le nouveau moteur continue d'être compatible avec les propriétés suivantes :

  • request.auth : accédez aux données de jeton et d'UID utilisateur.
  • request.method : identifie l'opération (par exemple, get, list).
  • request.path : chemin d'accès à la ressource consultée.
  • request.time : code temporel côté serveur de la requête.

Propriétés non acceptées

Les propriétés request.query telles que limit, offset et orderBy ne sont pas compatibles avec les vérifications des règles des pipelines en raison de la complexité de la détermination de ces valeurs dans les requêtes à plusieurs étapes.

Gestion et autorisations des étapes du pipeline

Il existe différentes étapes de pipeline qui correspondent à des opérations précises dans les règles de sécurité :

  • Autorisations allow list : déclenchées par les étapes collection(), collectionGroup() et database().
  • Autorisations allow get : déclenchées par l'étape documents(), qui est traitée de la même manière qu'une opération get par lot.
  • Étapes de modification des champs : les règles ne s'appliquent qu'aux données stockées, et non aux valeurs dérivées. Si un pipeline inclut des étapes qui modifient des champs (par exemple, AddFields, ReplaceWith, Select), le moteur de règles cesse d'appliquer les contraintes de filtre après avoir rencontré cette étape.
  • Étape des littéraux : l'étape literals() ne lit pas les données de la base de données, mais peut entraîner des coûts. Pour éviter tout abus, il doit être associé à une autre étape (comme collection()) qui peut être validée par des règles.