Description
Le contrôleur SystemSettingsController de server-nestjs (api/v1/system/settings) expose POST sans garde : ni UserGuard, ni @RequireAdminPermission('ManageSystem'), et aucune protection globale APP_GUARD n'existe dans l'application. Or la route legacy correspondante (apps/server/src/resources/system/settings/router.ts, upsertSystemSetting) exige AdminAuthorized.ManageSystem.
Ce défaut de parité bloque la bascule nginx-strangler de /api/v1/system/settings : aujourd'hui routée vers le legacy (garde active), elle deviendrait une écriture de configuration système non authentifiée au moment de la bascule. Le GET est volontairement public des deux côtés — parité correcte, ne pas ajouter de garde.
Issue découverte lors de l'audit de parité pré-bascule Vague 1 (voir la PR de bascule).
PRs liées
Issues liées
Exemples simples
Spécifications techniques
- Ajouter
@UseGuards(UserGuard) + @RequireAdminPermission('ManageSystem') sur upsert uniquement, même anatomie que SystemConfigController.
- Le schéma (
SystemSettingSchema) est déjà validé côté contrôleur — la garde est le seul écart.
Définition du fini
Description
Le contrôleur
SystemSettingsControllerde server-nestjs (api/v1/system/settings) exposePOSTsans garde : niUserGuard, ni@RequireAdminPermission('ManageSystem'), et aucune protection globaleAPP_GUARDn'existe dans l'application. Or la route legacy correspondante (apps/server/src/resources/system/settings/router.ts,upsertSystemSetting) exigeAdminAuthorized.ManageSystem.Ce défaut de parité bloque la bascule nginx-strangler de
/api/v1/system/settings: aujourd'hui routée vers le legacy (garde active), elle deviendrait une écriture de configuration système non authentifiée au moment de la bascule. LeGETest volontairement public des deux côtés — parité correcte, ne pas ajouter de garde.Issue découverte lors de l'audit de parité pré-bascule Vague 1 (voir la PR de bascule).
PRs liées
Issues liées
Exemples simples
Spécifications techniques
@UseGuards(UserGuard)+@RequireAdminPermission('ManageSystem')surupsertuniquement, même anatomie queSystemConfigController.SystemSettingSchema) est déjà validé côté contrôleur — la garde est le seul écart.Définition du fini
/api/v1/system/settingsest débloquée (garde vérifiée en parité du legacy)