Interrogez votre base de données avec le SDK JavaScript
Les flux quotidiens de aura.db, les règles qui refusent les appels dangereux et comment protéger une table avec une sécurité au niveau des lignes.
1. Lire les lignes
aura.from('todos') est un raccourci pour aura.db.from('todos'). Chaque appel renvoie { data, error } et ne lance jamais, voir les options et erreurs du client .
Chaîne de filtres : eq, neq, gt, gte, lt, lte, like, ilike, in, is et les autres répertoriés dans la référence de la base de données . Pour une page de lignes, utilisez range(from, to).
2. Insérer, mettre à jour et supprimer
Deux règles vous protègent des erreurs :
- Une insertion par lots nécessite les mêmes clés dans chaque ligne. Les lignes avec des clés différentes renvoient
400avecAll object keys must match. Remplissez les clés manquantes avecnull. update()etdelete()sans filtre sont refusés par le client avec le code erreurunfiltered_mutation, avant l'envoi de toute requête. Pour modifier volontairement chaque ligne, exécutez SQL à partir d'un serveur.
3. Une ligne, plusieurs lignes, ça compte
count: 'exact' compte chaque ligne correspondante. 'planned' et 'estimated' sont plus rapides sur de très grandes tables et approximatives.
4. Protégez une table
La sécurité au niveau des lignes est sur sur une nouvelle table. Avec la clé publique, n’importe qui peut la lire et l’écrire. Activez-le, puis ajoutez les stratégies dont vous avez besoin :
Les rôles de base de données sont aura_anon, aura_authenticated et aura_service_role. auth.uid() est NULL pour la clé publique et un identifiant utilisateur pour un utilisateur connecté. Voir Sécurité au niveau des lignes.
Une clé service_role contourne RLS de par sa conception : conservez-la sur votre serveur.
5. Fonctions SQL et rpc
Créez une fonction depuis un serveur, puis appelez-la de n'importe où avec rpc():
grant_execute_toest requis pour l'appeler. Sans cela, personne ne peut exécuter la fonction. Un rôle qui n'est pas répertorié obtient403 permission denied for function.authenticatedetaura_authenticatedsont acceptés.- Une nouvelle fonction est appelable après quelques secondes. Jusqu'à ce que l'API recharge son schéma,
rpc()renvoie404 Could not find the function. - La création de fonctions avec du SQL brut (
CREATE FUNCTION) est refusée : utilisezcreateFunction.
6. Exécutez SQL à partir d'un serveur
db.sql() nécessite une clé service_role. Il refuse un DELETE sans un WHERE et ne lit pas les catalogues système tels que pg_class ou pg_roles. Pour lister vos tables, utilisez admin.db.schema().