Tableau de bord d'administration
Sovrium fournit un tableau de bord d'administration d'application intégré : une famille de points de terminaison d'API en lecture seule qui donnent aux opérateurs et aux auditeurs une surface unique et cohérente sur la santé et l'inventaire de l'application en cours d'exécution. Chaque point de terminaison est protégé par RBAC, émet un événement de journal d'audit canonique et renvoie 404 (jamais 403) en cas d'accès non autorisé pour déjouer l'énumération.
Le tableau de bord est une surface de lecture. Les opérations de mutation — création d'utilisateurs, changement de rôles, publication de schéma — vivent dans leurs propres points de terminaison (Gestion des utilisateurs) ; le tableau de bord reflète l'état, il ne le modifie pas. Trois publics partagent exactement les mêmes formes de réponse : administrateurs (décisions de détail), opérateurs (rapports d'incident, passations d'astreinte) et auditeurs (documentation de revue SOC2 / GDPR).
Deux formes de réponse
Chaque point de terminaison du tableau de bord adopte l'une des deux formes, de sorte que le contrat se généralise proprement à travers les domaines.
| Forme | Modèle de point de terminaison | Corps |
|---|---|---|
| Vue d'ensemble | GET /api/admin/{domain}/overview |
Compteurs agrégés tenant compte de la période (totals), une série temporelle par paliers (series) et des métriques de santé dérivées. Non paginé. |
| Liste | GET /api/admin/{domain} |
Éléments paginés par curseur, chacun portant un bloc _admin de niveau opérateur avec metadata (comptes, horodatages de dernière activité). |
Les points de terminaison de vue d'ensemble acceptent un préréglage de période partagé (24h | 7d | 30d) via resolvePeriodWindow() ; les points de terminaison de liste acceptent la pagination par curseur, la recherche en texte libre et ?include_deleted=true.
Surface des points de terminaison
| Domaine | Point(s) de terminaison | Renvoie |
|---|---|---|
| Config | GET /api/admin/config/version |
Version en cours d'exécution, commit de build, runtime de base de données actif, version de Bun, heure de démarrage du processus. |
| Automatisations | GET /api/admin/automations/overview, GET /api/admin/automations/runs |
Totaux d'exécutions, nombre d'échecs, success_rate, séries par paliers ; liste d'exécutions paginée. |
| Utilisateurs | GET /api/admin/users/overview |
Total des utilisateurs, récemment actifs, nouvelles inscriptions pour la période, distribution des rôles, séries d'inscriptions/de sessions. |
| Tables | GET /api/admin/tables/overview |
rowCount, softDeletedCount, lastWriteAt, writesInPeriod par table, totaux, séries d'écritures. |
| Buckets | GET /api/admin/buckets, GET /api/admin/buckets/overview |
Liste de buckets paginée par curseur avec filtre par fournisseur ; vue d'ensemble du quota/de l'utilisation. |
| Formulaires | GET /api/admin/forms, GET /api/admin/forms/:formName |
Formulaires configurés avec nombre de soumissions et horodatages de dernière soumission ; détail par formulaire. |
# Version reflection — the smallest read endpoint, the cross-cutting shake-down test
curl -H 'Cookie: <admin session>' http://localhost:3000/api/admin/config/version
# Period-scoped overview
curl -H 'Cookie: <admin session>' 'http://localhost:3000/api/admin/tables/overview?period=7d'
# Cursor-paginated list with search
curl -H 'Cookie: <admin session>' 'http://localhost:3000/api/admin/forms?search=contact&limit=20'
Les préréglages de période sont partagés, pas par point de terminaison. Les points de terminaison de vue d'ensemble réutilisent un seul periodPresetSchema (24h | 7d | 30d) et un seul assistant resolvePeriodWindow() plutôt que de redéclarer l'énumération, de sorte qu'une fenêtre signifie la même chose partout. Les domaines clairsemés (inscriptions d'utilisateurs) et denses (exécutions d'automatisation) partagent le corps totals + series identique.
Garanties transversales
Chaque point de terminaison du tableau de bord hérite des mêmes primitives de sécurité et d'observabilité :
| Garantie | Comportement |
|---|---|
| RBAC | Un middleware à trois niveaux protège chaque route en fonction du rôle de l'appelant. |
| Anti-énumération | L'accès non autorisé renvoie 404, jamais 403 — l'espace des id est indevinable et l'existence de la route est inobservable. Voir Durcissement de la sécurité. |
| Journal d'audit | Chaque appel émet un événement canonique (par ex. form.detail.queried) exactement une fois. Voir Surveillance de l'activité. |
| OpenAPI | Les routes sont déclarées via l'assistant partagé adminRoute, de sorte que la surface est documentée et vérifiée en types. |
| Contrat de compatibilité ascendante | ?include_deleted=true s'analyse sans 400 afin que les auditeurs obtiennent une interface stable au fur et à mesure que la visibilité des lignes supprimées arrive. |
Points de terminaison frères (pas le tableau de bord)
Certaines lectures pertinentes pour l'opérateur vivent en dehors de la famille du tableau de bord /api/admin/{domain} parce qu'elles le précèdent ou appartiennent à un autre sous-système :
- Enregistrements par utilisateur (id, e-mail, nom) →
GET /api/auth/admin/list-users. Voir Gestion des utilisateurs. - Analytique de trafic agrégée →
GET /api/analytics/overviewet frères. Voir Analytique. - Flux d'activité à l'échelle du système →
GET /api/activity. Voir Surveillance de l'activité.
Pages connexes
- Gestion des utilisateurs — les opérations administratives de mutation que le tableau de bord reflète.
- Surveillance de l'activité — le flux du journal d'audit dans lequel chaque appel du tableau de bord écrit.
- Analytique — la surface de lecture de l'analytique de trafic.
- Durcissement de la sécurité — RBAC, 404-pas-403, limitation de débit.
- Aperçu des buckets — les buckets de stockage exposés par les points de terminaison de buckets.
- Aperçu des formulaires — les formulaires exposés par les points de terminaison de formulaires.