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 étapescollection(),collectionGroup()etdatabase(). - Autorisations
allow get: déclenchées par l'étapedocuments(), qui est traitée de la même manière qu'une opérationgetpar 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 (commecollection()) qui peut être validée par des règles.