← Retour au blogue

Faut-il garder le tableau de bord admin et les pages utilisateur dans la même application?

Un portail utilisateur et un portail admin côte à côte, reliés par une base de données, une API et une couche d’authentification et d’autorisation communes

Un guide d’architecture pour séparer les interfaces admin et utilisateur, renforcer la sécurité et mieux concevoir vos logiciels avec les assistants de code IA.

En développant une application Web, une question d’architecture revient souvent : le tableau de bord admin et les pages destinées aux utilisateurs devraient-ils vivre dans la même application?

Au début, tout garder ensemble semble pratique. Un seul code source, un seul processus de déploiement et des composantes partagées qui facilitent le développement.

Mais à mesure que le projet grandit, des questions apparaissent.

Le tableau de bord admin devrait-il avoir sa propre application? Son propre domaine? Est-il sécuritaire de laisser administrateurs et utilisateurs ordinaires accéder à la même application? Et comment prendre la bonne décision sans ajouter de complexité inutile?

La réponse n’est pas toujours de tout séparer. Le but est une architecture sécuritaire, maintenable et adaptée aux besoins réels de l’application.

1. Comprendre la différence entre les interfaces admin et utilisateur

Même si les deux interfaces font partie du même produit, elles ont des rôles différents.

L’interface utilisateur s’adresse aux clients ou aux utilisateurs ordinaires. Selon l’application, elle peut comprendre la gestion du compte, un tableau de bord personnel, des achats, des réservations, la création de contenu et les paramètres du profil.

L’interface admin s’adresse au personnel autorisé qui gère l’application. Elle peut comprendre la gestion des utilisateurs, l’analytique, les permissions, la modération du contenu, la configuration du système et les journaux d’audit.

Ces interfaces ont des flux de travail, une navigation et des exigences d’accès différents.

Pourtant, des responsabilités différentes n’exigent pas automatiquement des applications séparées.

2. Trois approches d’architecture

Il existe trois façons courantes de structurer les interfaces admin et utilisateur d’une application.

Option A : une seule application avec des routes séparées

example.com/dashboard
example.com/admin

Les deux interfaces utilisent le même code front-end et peuvent partager les services back-end, l’authentification, les composantes réutilisables et la base de données.

Les expériences admin et utilisateur peuvent quand même avoir des mises en page, une navigation et des permissions différentes.

Avantages

  • Développement et déploiement plus simples.
  • Moins de code dupliqué.
  • Réutilisation facile des composantes et des services.
  • Authentification et gestion des comptes cohérentes.
  • Moins de charge opérationnelle.

Inconvénients

  • Le code front-end peut devenir difficile à maintenir sans frontières claires.
  • Le code propre à l’admin peut nécessiter un découpage par route.
  • Avec une infrastructure partagée, une erreur dans la logique commune d’authentification ou d’autorisation peut toucher les deux interfaces.

Cette approche est souvent un bon point de départ pour les applications petites et moyennes.

Option B : des sous-domaines séparés

app.example.com
admin.example.com

Les interfaces admin et utilisateur peuvent être déployées séparément côté front-end tout en partageant des services back-end au besoin.

Avantages

  • Déploiements et calendriers de mise en production indépendants.
  • Séparation plus nette entre les interfaces.
  • Plus de souplesse pour des politiques de sécurité et des contrôles propres à l’admin.
  • Mise à l’échelle indépendante des applications front-end.

Inconvénients

  • Plus de travail de déploiement et de configuration.
  • Complexité accrue autour de l’authentification, des témoins (cookies), du CORS et des requêtes inter-origines.
  • Duplication possible de composantes et de dépendances front-end.

Un sous-domaine distinct est utile quand l’administration a des exigences opérationnelles ou de sécurité particulières. Mais un sous-domaine différent, à lui seul, ne garantit pas une meilleure sécurité.

Option C : des applications complètement séparées

Ici, le portail admin et l’application utilisateur sont développés et déployés indépendamment.

C’est sensé pour de grandes plateformes avec plusieurs équipes, des exigences d’isolement strictes, des processus d’administration complexes ou des cycles de mise en production indépendants.

Mais des applications séparées ajoutent des coûts de maintenance et d’exploitation. Elles peuvent dupliquer des fonctions et exiger plus de coordination entre les équipes.

Pour une petite application, cette architecture peut être inutilement compliquée.

3. La sécurité compte plus que la structure des URL

L’une des plus grandes idées reçues en architecture applicative est qu’il suffit de cacher un tableau de bord admin ou de le placer à une URL distincte pour le sécuriser.

C’est faux.

Une protection de route côté front-end peut rediriger un utilisateur ordinaire hors d’une page d’administration, mais le back-end doit quand même refuser les requêtes non autorisées.

Imaginez un utilisateur qui tente d’appeler directement une API d’administration. Même si la page admin est absente du menu, une API mal protégée peut quand même exposer des fonctions sensibles.

Une application bien conçue devrait mettre en place les contrôles suivants :

  • Authentification : Vérifier qui fait la requête.
  • Autorisation : Vérifier ce que cet utilisateur authentifié a le droit de faire.
  • Contrôle d’accès basé sur les rôles : Attribuer les bonnes permissions aux administrateurs, au personnel et aux utilisateurs ordinaires.
  • Application côté back-end : Protéger chaque point d’accès d’API privilégié.
  • Isolement des données : S’assurer qu’un utilisateur ne peut pas consulter les données d’un autre sans autorisation.
  • Journal d’audit : Consigner les actions administratives importantes.
  • Gestion sécuritaire des sessions : Protéger les sessions, les jetons, les témoins et la déconnexion.
Le principe essentiel est simple : le back-end doit appliquer les permissions, peu importe le front-end ou l’URL utilisés pour faire la requête.

4. Une architecture pratique pour la plupart des applications Web

Pour beaucoup de projets, un seul code front-end avec des mises en page distinctes et des routes protégées offre un bon équilibre entre simplicité et maintenabilité.

Voici une structure possible :

src/
├── app/
│   ├── router.tsx
│   └── providers.tsx
├── layouts/
│   ├── UserLayout.tsx
│   └── AdminLayout.tsx
├── pages/
│   ├── user/
│   │   ├── Dashboard.tsx
│   │   ├── Profile.tsx
│   │   └── Settings.tsx
│   └── admin/
│       ├── Dashboard.tsx
│       ├── ManageUsers.tsx
│       ├── ManageRoles.tsx
│       └── AuditLogs.tsx
├── components/
│   └── shared/
├── auth/
│   ├── AuthProvider.tsx
│   └── ProtectedRoute.tsx
├── services/
├── hooks/
└── types/

Cette structure distingue clairement les fonctions admin et utilisateur, tout en permettant aux deux interfaces de réutiliser les composantes, les services et l’infrastructure d’authentification communs.

La structure exacte dépendra du framework et du code existant. L’important est d’établir des frontières claires entre les responsabilités.

5. La place des assistants de code IA dans le processus

Des outils comme Claude Code peuvent aider à examiner un code existant, à repérer les faiblesses d’architecture, à inspecter les flux d’authentification et à proposer des améliorations.

Par contre, demander tout de suite à un assistant IA de repenser une application peut mener à des refontes inutiles ou à des recommandations mal adaptées au projet.

Mieux vaut utiliser l’IA comme réviseur d’architecture avant de s’en servir pour coder.

Commencez par lui demander d’inspecter le projet et d’expliquer comment l’application fonctionne.

Demandez-lui ensuite d’évaluer :

  • Si les interfaces admin et utilisateur sont bien séparées.
  • Si l’authentification et l’autorisation sont correctement implémentées.
  • Si les points d’accès back-end privilégiés sont bien protégés.
  • Si les composantes et les services partagés sont bien organisés.
  • Si l’application est prête à prendre de l’ampleur.
  • Si des déploiements séparés apporteraient de vrais avantages.

Exigez des preuves tirées du code réel : chemins de fichiers, points d’accès d’API et détails d’implémentation pertinents.

Demandez à l’assistant de distinguer les vulnérabilités confirmées des faiblesses possibles qui demandent plus d’analyse.

Enfin, demandez un plan d’amélioration priorisé plutôt qu’une réécriture immédiate.

Cette approche rend le développement assisté par l’IA plus réfléchi et réduit le risque d’ajouter de la complexité inutile.

Requête de revue d’architecture

Copiez ceci dans Claude Code, Cursor ou un autre assistant de code IA ouvert dans votre projet. Il suit les étapes ci-dessus et ne modifie aucun code sans votre approbation.

Agis comme réviseur d’architecture pour mon application. Ne modifie aucun code. Inspecte d’abord le code source, puis fais ton rapport.

Étape 1 : Explique comment l’application fonctionne actuellement :
- Comment les interfaces admin et utilisateur sont structurées (routes, mises en page, applications ou sous-domaines séparés).
- Comment fonctionne l’authentification et où les sessions ou les jetons sont vérifiés.
- Comment les rôles et les permissions sont définis et appliqués.
- Quels points d’accès back-end effectuent des actions réservées aux administrateurs.

Étape 2 : Évalue :
1. Si les interfaces admin et utilisateur sont bien séparées.
2. Si l’authentification et l’autorisation sont correctement implémentées.
3. Si chaque point d’accès back-end privilégié vérifie le rôle de l’utilisateur sur le serveur, et pas seulement dans le front-end.
4. Si un utilisateur ordinaire pourrait atteindre des données ou des actions admin en appelant l’API directement ou en changeant un identifiant dans une URL.
5. Si les composantes et les services partagés sont bien organisés.
6. Si l’application est prête à prendre de l’ampleur.
7. Si des déploiements séparés (par exemple admin.example.com) apporteraient de vrais avantages à ce projet.

Règles :
- Appuie chaque point sur des preuves tirées du code : chemins de fichiers, points d’accès d’API et lignes pertinentes.
- Distingue les vulnérabilités confirmées des faiblesses possibles qui demandent plus d’analyse.
- Ne propose pas de réécriture ni de nouvelle architecture sans raison claire.

Termine par un plan d’amélioration priorisé, en commençant par les correctifs de sécurité, et attends mon approbation avant de faire des changements.

6. Les questions à se poser avant de décider

Avant de choisir une architecture, répondez à ces questions :

Sur le projet

  • Quelle est la complexité de l’application?
  • Combien de rôles d’utilisateurs y a-t-il?
  • L’interface admin aura-t-elle des fonctions très différentes?
  • Prévoit-on des équipes ou des calendriers de mise en production distincts?

Sur la sécurité

  • Les permissions admin sont-elles appliquées côté back-end?
  • Un utilisateur ordinaire peut-il accéder aux API d’administration?
  • Les données sensibles sont-elles bien isolées?
  • Les actions administratives sont-elles traçables?

Sur la maintenabilité

  • Les interfaces admin et utilisateur peuvent-elles évoluer indépendamment?
  • Les composantes partagées sont-elles clairement définies?
  • Le front-end devient-il difficile à maintenir?
  • Des déploiements séparés régleraient-ils un vrai problème?

Sur l’exploitation

  • Le projet exige-t-il des déploiements indépendants?
  • Y a-t-il des exigences de sécurité ou de conformité distinctes?
  • L’équipe est-elle prête à maintenir plusieurs applications?

Ce sont les réponses qui devraient déterminer l’architecture, et non le fait qu’une structure paraisse plus sophistiquée.

7. Un cadre de décision

Comme point de départ général :

BesoinApproche suggérée
Application petite ou moyenneUn seul code source avec des routes séparées
Fonctions partagées et petite équipeUn seul code source avec des modules bien délimités
Cycles de mise en production front-end indépendantsDéploiements front-end séparés
Politiques de sécurité propres à l’administrationEnvisager un isolement plus fort et un déploiement séparé
Grandes équipes et exigences opérationnelles complexesEnvisager des applications séparées
Accès administratif sécuriséAppliquer l’autorisation côté back-end, peu importe l’architecture

Ce sont des points de départ, pas des règles absolues. Une application monolithique bien structurée peut être plus maintenable et plus sécuritaire que des applications séparées mal conçues.

Conclusion

Garder ou non les pages admin et utilisateur ensemble devrait dépendre des besoins de l’application, de ses frontières de sécurité et de ses besoins de maintenance à long terme.

Pour beaucoup de projets, une seule application avec des routes séparées, des mises en page distinctes, des services partagés et des permissions bien appliquées côté back-end suffit.

À mesure que l’application grandit, des déploiements ou des sous-domaines distincts peuvent devenir pertinents. Des applications complètement séparées ne devraient arriver que lorsqu’une raison technique ou opérationnelle claire justifie leur complexité.

La leçon la plus importante : évaluez l’architecture existante avant de la changer.

Construisez pour les besoins que vous avez, préservez ce qui fonctionne déjà et n’ajoutez de la complexité que lorsqu’elle règle un vrai problème.