Skip to content

fix: default unmatched GitLab members to developer as backward compat - #2769

Closed
shikanime wants to merge 1 commit into
mainfrom
fix/gitlab-default-developer-2682
Closed

shikanime wants to merge 1 commit into
mainfrom
fix/gitlab-default-developer-2682

Conversation

@shikanime

Copy link
Copy Markdown
Member

Issues liées

Refs #2682


Quel est le comportement actuel ?

generateAccessLevelMapping (apps/server-nestjs/src/modules/gitlab/gitlab.utils.ts) assigne AccessLevel.GUEST à tout membre dont aucun rôle ne correspond à un groupe OIDC. Un membre existant perd ses droits Developer (push, déclenchement de pipeline) sur son groupe GitLab.

Quel est le nouveau comportement ?

Le fallback par défaut devient AccessLevel.DEVELOPER, rétablissant la parité avec le plugin historique plugins/gitlab (d67f96a, 1f1fabd) qui porte un TODO documenté pour un éventuel retour à Guest après la migration des membres pré-fine-grained.

  • gitlab.utils.ts : seed du fallback GUEST → DEVELOPER
  • gitlab.service.spec.ts : les deux cas sans correspondance (ajout et rétrogradation) attendent désormais DEVELOPER

Suite server-nestjs : 664 passed, 69 skipped, exit 0.

Cette PR introduit-elle un breaking change ?

Non — elle restaure le comportement historique du plugin GitLab pour les membres sans rôle correspondant.

Autres informations

PR #2681 portait la même mitigation mais a été fermée sans fusion ; l'issue #2682 a été rouverte avec preuve (le fallback Guest est toujours en place sur main).

Legacy plugins/gitlab folded unmatched members at AccessLevel.DEVELOPER (d67f96a, 1f1fabd) with a documented TODO to revisit after the pre-fine-grained member migration. The server-nestjs port seeds the fallback at AccessLevel.GUEST, silently downgrading existing members whose OIDC groups no longer match any role suffix.  Restore the Developer fallback in generateAccessLevelMapping so no-match members keep push and pipeline-trigger rights, matching the legacy behavior until that migration ships.  Refs #2682  Co-authored-by: Automata <automata@shikanime.studio>

Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
Change-Id: If911dd76d8eee03970a3bd36207748256a6a6964
@cloud-pi-native-sonarqube

Copy link
Copy Markdown

@github-actions github-actions Bot added the built label Sep 23, 2026

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict : Commentaire

La modification rétablit la parité avec le plugin legacy (repli DEVELOPER, commits d67f96a / 1f1fabd, #2682) : résumé, spécifications et noms de tests sont alignés, aucune règle TS stricte violée. Point positif : la chaîne de preuve (issue, commits de référence, suite 664 tests au vert) rend la justification auditable. Vérification complémentaire effectuée : le seul autre AccessLevel.GUEST du module (gitlab.service.ts:199) est défensif et inatteignable sur ce chemin, la couverture project.members étant totale ; la nit sur l'absence d'assertion de plafond est résolue par l'auteur même de la revue (aucun test requis, changement assumé).

return highest
}, null)
acc.set(membership.user.id, highest ?? AccessLevel.GUEST)
acc.set(membership.user.id, highest ?? AccessLevel.DEVELOPER)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🔴 Bloquant — conditionnel] Élévation du repli par défaut GUEST → DEVELOPER sur un chemin de synchronisation d'accès : fail-open, en tension avec le moindre privilège. La justification exigée (parité legacy, #2682) figure dans la description de la PR — à confirmer explicitement par un mainteneur avant fusion ; à défaut, viser AccessLevel.REPORTER en repli intermédiaire.

@shikanime shikanime closed this Sep 23, 2026
@shikanime shikanime moved this to Backlog in Cloud Pi Native Sep 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working built

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant