Skip to content

🐛 [BUG] - Perte d'accès Grafana : getListPerms ne remplit plus qu'une seule paire de groupes Keycloak (prod XOR hors-prod) #2686

Description

@shikanime

Problème

Depuis la migration du plugin observability vers apps/server-nestjs (#2418), les utilisateurs perdent l'accès Grafana.

Constat. getListPerms (apps/server-nestjs/src/modules/observability/observability.utils.ts) range chaque utilisateur dans une seule paire de groupes Keycloak : prod si au moins un environnement prod existe, hors-prod sinon. Le plugin historique (cloud-pi-native/console-plugin-observability, src/function.ts) rangeait chaque utilisateur dans les deux paires — le wrapper de hooks Fastify (apps/server/src/utils/hook-wrapper.ts, transformToHookProject) attachait la même liste de permissions à chaque environnement.

Impact. reconcileGroupMembership est une sync diff-and-remove : au premier project.upsert sous server-nestjs, tous les membres du groupe opposé à la paire choisie sont retirés de Keycloak. Grafana associe les rôles org à partir de ces groupes : la perte d'accès est déterministe.

Preuve. Repro : apps/server-nestjs/src/modules/observability/zz-investigate-repro.spec.ts — 2 tests échouent (contrat legacy attendu : utilisateur présent dans les deux paires quand les deux stages existent). Le spec existant (observability.utils.spec.ts) code en dur la sémantique régressive (« assigns to prod bucket when a prod environment exists »).

Définition du fini

  • getListPerms restaure le bucketing par stage legacy : un utilisateur apparaît dans la paire prod si un env prod existe et dans la paire hors-prod si un env non-prod existe
  • Les assertions du spec unitaire codifiant la sémantique mono-bucket sont corrigées
  • Test de non-régression : avec des membres présents dans les deux paires, reconcileGroupMembership ne retire personne (les deux stages présents)
  • pnpm lint et tests du workspace server-nestjs verts
  • Note de remédiation documentée : rejouer project.upsert par projet affecté pour restaurer les adhésions détruites (idempotent)

Impacts

  • Sécurité : retrait destructif d'adhésions Keycloak (perte d'accès Grafana) — sync à corrective après déploiement du fix
  • API/données : aucun changement de schéma
  • Exploitation : instances affectées nécessitent un replay des hooks projet après mise à jour

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions