Aurabase Logo
aurabasedocs
docsGuidesRBAC multi-tenant

RBAC multi-tenant

Modéliser des rôles applicatifs (admin, editor, viewer, billing) au-dessus d’Aurabase Auth. Patterns pour orgs plates, hiérarchiques, et permissions par ressource.

10 min de lecture·Niveau avancé·Révisé le 15 avr. 2026
#
Modèle

Tables : members, roles, permissions

§ 01
migrations/rbac.sql
SQL
create table orgs (id uuid primary key default gen_random_uuid(), name text not null);
create table org_members (
org_id uuid references orgs(id) on delete cascade,
user_id uuid references auth.users(id) on delete cascade,
roles text[] not null default '{}',
primary key (org_id, user_id)
);
#
Claims

Injecter les rôles dans le JWT

§ 02

Un hook au signin enrichit le JWT avec tenant (org_id actif) + roles (array). Les helpers auth.tenant() et auth.has_role() les exposent à vos policies.

functions/jwt-enrich.ts
TYPESCRIPT
export default edge.hook('auth.sign', async ({ user, claims }) => {
const { data: m } = await aura
.from('org_members')
.select('org_id, roles')
.eq('user_id', user.id).single()
return { ...claims, tenant: m.org_id, roles: m.roles }
})
Info
Le hook s'exécute au sign-in et à chaque refresh. Modifier les rôles d'un user devient actif à son prochain refresh token (max 15 min).
#
Policies

Combiner tenant + rôles

§ 03
migrations/orgs_rls.sql
SQL
-- Tout membre de l'org voit les projets
create policy "projects_read" on projects
for select to authenticated
using (org_id = auth.tenant());
-- Seul admin peut créer/supprimer
create policy "projects_admin" on projects
for all to authenticated
using (org_id = auth.tenant() and auth.has_role('admin'))
with check (org_id = auth.tenant());
#
Enterprise

Provisioning automatique via SCIM

§ 04

Sur plan Enterprise, activez SCIM 2.0 depuis Okta, Azure AD, Google Workspace. Les users + rôles sont synchronisés automatiquement : ajout/retrait immédiat, déprovisioning instantané au départ d'un employé.

Dernière mise à jour · 15 avr. 2026