Panneau d'Administration
Règles
- Tableaux de données : pagination, tri et filtrage côté serveur — ne chargez jamais toutes les lignes côté client — utilisez
?page=1&limit=25&sort=createdAt&order=desc - Modèle CRUD : liste (tableau), création (formulaire/modal), lecture (vue détaillée), mise à jour (formulaire d'édition), suppression (dialogue de confirmation) — mise en page cohérente pour toutes les ressources
- Accès basé sur les rôles : définir les rôles (admin, éditeur, visualisateur) avec une matrice de permissions — vérifier les permissions côté serveur sur chaque route API, pas seulement dans l'interface utilisateur
- Opérations par lots : sélectionner plusieurs lignes, action par lot (suppression, exportation, changement de statut) — confirmer les actions destructrices, traiter en arrière-plan pour les lots volumineux
- Recherche : recherche textuelle avec debounce (300ms) sur les champs clés — combiner avec des filtres de colonne pour des requêtes précises
- Gestion des utilisateurs : lister les utilisateurs, voir les détails, changer les rôles, désactiver/activer les comptes, usurper l'identité (admin uniquement avec journal d'audit)
- Journal d'audit : enregistrer qui a changé quoi et quand —
{ userId, action, resource, resourceId, changes, timestamp } - Mise en page : barre de navigation latérale (repliable), fil d'Ariane, titre de page avec boutons d'action — responsive mais optimisé pour le bureau
Modèle de Vérification des Permissions
const PERMISSIONS = {
admin: ["users:read", "users:write", "users:delete", "data:read", "data:write", "data:delete"],
editor: ["data:read", "data:write"],
viewer: ["data:read"],
} as const;
function can(role: string, permission: string): boolean {
return PERMISSIONS[role]?.includes(permission) ?? false;
}
// Middleware
if (!can(user.role, "users:write")) return Response.json({ error: "Forbidden" }, { status: 403 });
Modèle d'API de Tableau de Données
GET /api/admin/users?page=1&limit=25&sort=createdAt&order=desc&search=john&role=admin
Retourne : { data: [...], total: 150, page: 1, limit: 25, totalPages: 6 }
À Éviter
- Vérifications de permissions uniquement côté client — appliquez-les toujours côté serveur
- Charger toutes les données puis paginer dans le navigateur — utilisez la pagination côté serveur
- Aucune confirmation pour les actions destructrices — confirmez toujours les suppressions et les opérations par lots
- Absence de piste d'audit — vous devez savoir qui a changé quoi