Row-Level Security est une feature native PostgreSQL qui filtre les lignes retournées (ou acceptées) à la volée, en évaluant une expression SQL qui peut dépendre du rôle courant et de claims JWT. Aurabase injecte les claims user via request.jwt.claims et expose les helpers auth.uid(), auth.role(), auth.tenant(), auth.has_role().
Cas d'usage : B2B SaaS où chaque user appartient à une organisation, et voit toutes les données de son org. Le JWT contient tenant, le helper auth.tenant() le retourne.
migrations/tenant_rls.sql
SQL
create policy "orders_tenant_scope" on orders
for all to authenticated
using (tenant_id = auth.tenant())
with check (tenant_id = auth.tenant());
-- Index indispensable pour la perf
create index idx_orders_tenant on orders(tenant_id);
RLS désactivée ? Vérifiez avec select relrowsecurity from pg_class where relname = 'posts'
Policies qui s'additionnent : multiple policies sur même table + opération + rôle combinent en OR. Restreignez avec AND dans une seule policy si besoin
Permissions GRANT manquantes : même avec une policy, le rôle doit avoir grant select on posts to authenticated
Claims non injectés : depuis Postgres, select current_setting('request.jwt.claims', true) — null signifie que vous êtes en direct DB, pas via le gateway