Contexte
Deayus ERP est une plateforme de gestion d’entreprise multi-tenant.
Le projet vise à construire une fondation technique capable d’accueillir plusieurs domaines fonctionnels, comme la gestion des utilisateurs, la facturation, les ressources humaines ou la gestion commerciale.
Objectif
Les objectifs principaux sont :
- gérer plusieurs organisations ;
- isoler les données de chaque organisation ;
- associer des utilisateurs à plusieurs organisations ;
- définir des rôles propres à chaque tenant ;
- contrôler les accès grâce à des permissions ;
- préparer l’ajout de futurs modules métier.
Fonctionnalités
Les fonctionnalités actuellement développées comprennent :
- authentification avec Keycloak ;
- création du profil utilisateur local ;
- création et consultation des organisations ;
- gestion des membres ;
- attribution des rôles ;
- consultation des utilisateurs ;
- lecture des memberships ;
- gestion des permissions ;
- sélection du tenant actif.
Architecture
L’application repose sur une architecture séparant les différentes responsabilités.
Frontend
Angular fournit l’interface d’administration.
Le frontend gère notamment :
- la navigation ;
- l’affichage des organisations ;
- la sélection du tenant ;
- la consultation des utilisateurs ;
- la gestion des membres.
Backend
Spring Boot fournit l’API REST et centralise :
- la logique métier ;
- les contrôles d’accès ;
- l’accès aux données ;
- la validation ;
- la gestion du tenant.
Authentification
Keycloak gère l’identité des utilisateurs et émet les jetons JWT.
Persistance
PostgreSQL stocke les utilisateurs locaux, les organisations et les appartenances.
Infrastructure
Docker est utilisé pour exécuter Keycloak, PostgreSQL, le backend et les autres services nécessaires.
Stack technique
- Angular ;
- TypeScript ;
- Spring Boot ;
- Spring Security ;
- Java ;
- PostgreSQL ;
- Keycloak ;
- Docker ;
- Maven.
Modèle de données
User
Représentation locale d’un utilisateur authentifié.
Organization
Organisation représentant un tenant.
Membership
Association entre un utilisateur et une organisation.
Permission
Capacité précise accordée à un rôle.
L’entité Membership permet à un même utilisateur d’avoir un rôle différent selon l’organisation.
Sécurité
Le système combine plusieurs niveaux de contrôle.
Authentification
Keycloak vérifie l’identité de l’utilisateur.
Tenant actif
Le frontend transmet l’organisation active dans le header X-Tenant-Id.
Le backend ne fait jamais confiance à cette valeur sans la vérifier.
Autorisation
Avant une opération, le backend contrôle :
- l’identité de l’utilisateur ;
- son appartenance à l’organisation ;
- son rôle ;
- les permissions requises.
Permissions utilisées
Parmi les permissions actuelles :
USER_READ;MEMBERSHIP_READ;MEMBERSHIP_MANAGE.
Problèmes rencontrés
Isolation des organisations
Les données d’une organisation ne doivent jamais être accessibles depuis une autre.
Rôles dépendants du tenant
Un utilisateur peut être administrateur dans une organisation et simple utilisateur dans une autre.
Permissions évolutives
Un contrôle basé uniquement sur les rôles devient rapidement difficile à maintenir.
Synchronisation avec Keycloak
L’identité Keycloak doit être reliée à une représentation locale dans la base de données.
Solutions apportées
Association utilisateur-organisation
Problème
Un rôle global ne permettait pas de représenter les droits d’un utilisateur dans plusieurs organisations.
Solution
Le rôle est stocké dans l’entité Membership, qui relie un utilisateur à une organisation.
Contrôle du tenant
Problème
Le client pouvait transmettre l’identifiant de n’importe quelle organisation.
Solution
Le backend vérifie systématiquement l’appartenance de l’utilisateur au tenant transmis.
Permissions métier
Problème
Les conditions basées uniquement sur les rôles rendaient l’autorisation trop rigide.
Solution
Les actions sont contrôlées avec des permissions précises comme USER_READ ou MEMBERSHIP_MANAGE.
Architecture modulaire
Problème
Ajouter de nouveaux domaines métier risquait de rendre le backend difficile à maintenir.
Solution
Le backend est organisé par modules fonctionnels comme users, organizations, memberships et permissions.
Valeur apportée
Deayus ERP fournit une architecture modulaire permettant à plusieurs organisations d'utiliser une même application tout en conservant une isolation complète de leurs données.
Grâce à son modèle multi-tenant, à sa gestion fine des rôles et à son organisation par modules métier, la plateforme peut servir de base au développement d'un ERP adaptable aux besoins de différents secteurs d'activité.