Retour à la documentation
Guide 08

Administration

Guide opérationnel pour les administrateurs : utilisateurs, rôles (RBAC), workspace, audit, licences et backups administratifs. Toutes les opérations exigent authMiddleware plus des permissions spécifiques - voir l'API Reference pour l'inventaire complet…

3 min de lecture

Guide opérationnel pour les administrateurs : utilisateurs, rôles (RBAC), workspace, audit, licences et backups administratifs. Toutes les opérations exigent authMiddleware plus des permissions spécifiques - voir l'API Reference pour l'inventaire complet des endpoints.

Bootstrap admin

Au premier démarrage (si SEED_BOOTSTRAP_ADMIN=true), le serveur crée un admin avec des identifiants depuis les env (SEED_ADMIN_USERNAME=admin, SEED_ADMIN_PASSWORD=admin123, [email protected]). Le compte a mustChangePassword=true → le premier login impose le changement. Setup wizard via GET /api/system/is-initialized → POST /api/system/initialize.

Sécurité : change immédiatement le mot de passe bootstrap et définis un JWT_SECRET
fort en production. Le fallback scryptSync(JWT_SECRET, ...) pour ENCRYPTION_KEY
rend JWT_SECRET un matériel cryptographique - ne l'expose pas.

Utilisateurs - /api/users

OpérationEndpointPermission
Liste paginéeGET /usersrequireAdmin
DétailGET /users/:idself/admin
ModificationPUT/PATCH /users/:idself/admin (updateUserSchema)
SuppressionDELETE /users/:idrequireAdmin
AvatarPOST/DELETE /users/:id/avatarJWT (multipart)

Delete : DELETE est un hard delete avec cleanup des relations (UserRole, ProjectAccess, WorkspaceAccess) et invalidation du cache d'auth ; l'admin ne peut pas s'auto-supprimer. updateUserSchema valide username/email/password/firstName/lastName/customInstructions/textSize (les custom instructions sont préposées au system prompt de l'agent) ; les non-admin ne peuvent pas changer leur propre mot de passe depuis cet endpoint.

Rôles & RBAC - /api/roles

31 permissions définies dans packages/shared/src/constants/permissions.ts (PERMISSION_NAMES). 13 sections de menu (MENU_SECTIONS, inclut uploads).

OpérationEndpointPermission
Sections menu visiblesGET /roles/me/menu-sectionsJWT
Liste des rôlesGET /rolesrequireAdmin
DétailGET /roles/:roleIdrequireAdmin (UUID)
CréationPOST /rolesrequireAdmin (createRoleSchema, isDefault=false)
UpdatePUT /roles/:roleIdrequireAdmin (replace atomique des permissions)
Sections menu du rôlePUT /roles/:roleId/menu-sectionsrequireAdmin
SuppressionDELETE /roles/:roleIdrequireAdmin
Assign/RevokePOST /roles/assign /revokerequireAdmin

Rôles par défaut : admin (toutes les 31 permissions) et user (11 permissions : les 9 de base plus memory:read/memory:write pour les mémoires per-utilisateur ; filters:manage est réservé à admin/superuser). "Superuser" coïncide avec admin. Les permissions sont vérifiées via requirePermission(name) ou le shortcut requireAdmin. L'assignation est many-to-many (UserRole).

Workspaces & Projects

Workspace (/api/workspaces) : unité d'isolation pour chats, documents, agent config.

  • Création : workspace:create + license max_workspaces (Community 3, Enterprise ∞).
  • Accès : middleware requireWorkspaceAccess (join table WorkspaceAccess).
  • Soft-delete + restore (PUT /:id/restore).
  • Dossiers de chat : /:id/folders[/:folderId] + restore.

Project (/api/projects) : regroupe des workspace corrélés.

  • Création : project:create + license max_projects.
  • Accès : requireProjectAccess (ProjectAccess).
  • Export d'archive : GET /:projectId/export (stream).
  • Usage stats : GET /:projectId/usage.

Audit / Event Log - /api/event-logs

License audit_log_immutable (Enterprise). GET avec filtres entityType/entityId/userId + limit/offset (pagination). eventLogService.logEvent délègue l'écriture au plugin enterprise (no-op en Community) et dispatch les webhooks fire-and-forget. Entités loggées (EntityType) : user, workspace, project, chat, document, mcp_connection, dlp, archive/archive_page/archive_import, ocr_job, synthesis_run, wiki_edit, backup_destination/backup_job, provider, memory. Quand le flag immutable est actif, les enregistrements ne sont pas modifiables/supprimables (append-only au niveau app).

Licences

  • Community (défaut) : flags limités (voir 03 - Configuration).
  • Enterprise : LICENSE_KEY (JWT HS256) + LICENSE_SECRET. Payload validé contre licensePayloadSchema. Expiré/invalide → fallback Community avec warn, graceful degradation à la runtime (pas de restart).
  • Endpoint : GET /api/license/info (public) → { license, features }.
  • Gating : requireFeature(flag) → 402 ; requireFeatureLimit(flag, model) → 402 si count >= limit (Enterprise = Infinity).

Backups administratifs

Voir 05 - Feature Guide § Backup. Endpoints admin :

  • Logs /api/system/backups (backup:log:read).
  • Destinations /api/backup-destinations (backup:destination:read/write, license max_backup_destinations).
  • Jobs /api/backup-jobs (backup:job:read/write), trigger manuel POST /:id/run.
  • Restore /api/backups/restore/:logId[/dry-run] (backup:restore:write).
  • Test de destination POST /backup-destinations/:id/test.

Settings - /api/system/settings

GET/PUT bulk (retourne { updated, rejected }). Groupes : LLM, Embedding/Vector, ports/URL, Auth, Branding (gated white_label), Feature, OCR, Synthesis, Retention. Les clés ALWAYS_READONLY sont refusées. Chat retention uniquement via PUT /api/system/chat-retention (audité, confirmDataLoss: true). Détails dans 03 - Configuration.

SSO - /api/sso

License sso_enabled. GET/PUT /config, POST /test. Config SAML/OIDC enterprise.