25951 shaares
Cet article présente une approche pragmatique pour construire une application SaaS multi-tenant avec Symfony, en utilisant une base de données partagée et une seule codebase pour plusieurs clients (tenants). L’article s’appuie sur l’expérience de l’auteur, qui a développé une plateforme pour des marques de retail, chacune ayant ses propres magasins, utilisateurs et règles d’accès.
Points clés :
- Résolution du tenant : Identification du client actif via la session (back-office) ou le sous-domaine (front-office), stockée dans un service
TenantContextaccessible partout dans l’application. - Isolation des données : Toutes les entités liées à un client incluent un
brand_id, et les requêtes sont automatiquement filtrées par ce contexte. - Contrôle d’accès (ACL) : Gestion des fonctionnalités et permissions par client via des listes de contrôle d’accès (ACL) et des voters Symfony, permettant d’activer/désactiver des fonctionnalités par marque.
- Architecture unifiée : Le même
TenantContextest utilisé pour le back-office (session) et le front-office (domaine), garantissant une cohérence et une sécurité optimale.
L’article insiste sur la simplicité, la maintenabilité et l’évolutivité de cette solution, idéale pour les SaaS nécessitant une isolation des données sans complexité infrastructurelle.