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

L'objectif principal de la prise en charge des règles de requêtes de pipeline est de faire correspondre les capacités de filtrage du moteur de règles existant. Bien que les requêtes de pipeline offrent un riche ensemble de fonctionnalités, le moteur de règles est limité à la reconnaissance de filtres simples pour garantir la satisfiabilité et la sécurité des requêtes.

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 le contexte de requête, 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 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.