Console d'administration multi-tenant : seul développeur, en production en deux mois
Une console d'administration, c'est rarement le projet le plus visible. C'est pourtant l'outil qu'une équipe ouvre tous les jours. J'ai conçu et livré celle d'une plateforme éducative seul, de l'infrastructure à l'interface, et elle était en production après deux mois.
Le contexte
J'ai travaillé pour un organisme à but non lucratif québécois en technologies éducatives. Sa plateforme SaaS corrige des textes d'élèves à l'aide de l'IA, pour des écoles du Québec. Elle traite donc des données d'élèves mineurs, soumises à la Loi 25 sur la protection des renseignements personnels.
La plateforme tourne sur plusieurs environnements de production Azure. Chacun réunit une application web, une base de données, un pipeline Python et un LLM, et sa base est partagée par une dizaine de clients. Au départ, les environnements séparaient les clients selon leur fournisseur d'identité, Microsoft Entra d'un côté et Google Workspace de l'autre. Puis, à mesure que de nouveaux clients signaient, de nouveaux environnements se sont ajoutés.
Le problème
L'équipe interne, au support comme au produit, devait pouvoir administrer les clients de chaque environnement : créer des utilisateurs, attribuer des rôles, organiser des groupes, importer des listes complètes d'un coup.
Deux contraintes rendaient l'exercice exigeant :
- un seul développeur, moi, pour tout livrer : infrastructure, API, interface et authentification;
- des données sensibles : une erreur de droits d'accès pourrait exposer des renseignements sur des élèves.
La solution
L'infrastructure, c'est du code
Toute l'infrastructure est décrite avec Pulumi sur Azure. Un environnement n'est plus une suite de clics dans un portail : c'est du code versionné, qu'on peut rejouer à l'identique. C'est ce qui m'a permis de provisionner quatre environnements clients sans refaire quatre fois le même travail.
L'authentification, confiée à la plateforme
Plutôt que de coder une authentification maison, je l'ai confiée à Easy Auth, l'authentification intégrée d'Azure : l'utilisateur est authentifié par la plateforme avant même que sa requête n'atteigne l'API. Moins de code d'authentification à écrire, c'est aussi moins de code sensible à maintenir.
Une API et une interface pensées pour le quotidien
- API : NestJS, avec Prisma pour l'accès aux données SQL Server.
- Interface : React et TypeScript.
Les fonctionnalités livrées couvrent le travail de tous les jours :
- gestion des utilisateurs, des rôles et des groupes;
- import en lot avec un rapport d'erreurs qui indique précisément quoi corriger;
- connexion multi-fournisseurs, avec Microsoft et Google.
Les résultats
- En production après deux mois, de la première ressource d'infrastructure à la dernière page de l'interface.
- Quatre environnements clients provisionnés sur Azure à partir du même code.
- Une console utilisée au quotidien par l'équipe interne pour administrer les clients.
Ce que j'en retiens
- Seul, l'automatisation devient une équipe. L'infrastructure en code garde la mémoire de chaque environnement, et une revue automatique de chaque pull request apporte le deuxième regard qui manque : j'en parle dans l'article sur la revue de code par IA.
- Déléguer ce qui n'est pas son cœur de métier. L'authentification est un problème résolu : mieux vaut s'appuyer sur la plateforme que de le résoudre à nouveau.
- La conformité se pense dès le départ. Sur une plateforme qui traite des données d'élèves, la traçabilité ne s'ajoute pas après coup : voir le journal d'audit et le cycle de vie des données.


