Boilerplate-Stack
Retour au blog
Articles

Mettre en place le RBAC (contrôle d'accès par rôles) avec Supabase Auth

|
2 min de lecture

Le RBAC (Role-Based Access Control) est la fondation de tout SaaS B2B. Pourtant, beaucoup de développeurs codent des rôles en dur dans le frontend — une faille de sécurité majeure. Voici la méthode propre avec Supabase Auth et Next.js.

1. Modèle de données

Les rôles ne doivent pas vivre sur l'utilisateur mais sur la membership entre un user et une organisation :

memberships (
  user_id uuid references auth.users,
  account_id uuid references accounts,
  role_slug text references roles(slug)
)

Un même utilisateur peut être owner dans une organisation et member dans une autre. Le rôle n'a de sens que dans le contexte d'un compte.

2. Rôles dynamiques ou figés ?

Deux approches existent :

  • Figés en code : 3 rôles maximum (owner, admin, member). Simple mais pas extensible.
  • Dynamiques en base : table roles avec colonne permissions (JSONB). Permet de créer des rôles personnalisés depuis l'admin.

Pour un SaaS B2B sérieux, optez pour la version dynamique avec rôles système protégés.

3. Row Level Security (RLS)

La sécurité doit être enforced au niveau base de données, pas seulement applicatif :

CREATE POLICY "members_can_read" ON projects FOR SELECT
USING (EXISTS (
  SELECT 1 FROM memberships
  WHERE memberships.account_id = projects.account_id
  AND memberships.user_id = auth.uid()
));

4. Vérification des permissions côté serveur

Créez une fonction utilitaire checkPermission(accountId, permission) qui :

  1. Charge la membership de l'utilisateur
  2. Charge le rôle associé
  3. Vérifie si le rôle inclut la permission demandée

Appelez-la dans chaque route API et server action avant toute action sensible.

5. UI conditionnelle

Côté client, masquez les boutons selon les permissions. Mais ne comptez jamais sur l'UI pour la sécurité — l'utilisateur peut toujours appeler l'API directement.

Ne perdez pas une semaine sur le RBAC. Boilerplate-Stack embarque un système de rôles dynamiques complet : owner/admin/member, permissions JSONB, RLS sur chaque table, et UI admin pour créer des rôles personnalisés.

Conclusion

Un RBAC robuste est non-négociable pour un SaaS B2B. Faites-le bien dès le début. Boilerplate-Stack vous donne l'architecture complète, testée et documentée.