feat/user-deprovisioning #12
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/user-deprovisioning"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Déprovisionnement des utilisateurs + logout fiable
Ferme les deux trous du cycle de vie des identités : un utilisateur désactivé/supprimé dans PocketID gardait ses sessions (7 j) et ses clés API (30 j), et le logout prétendait réussir même en échec (état frontend + cookie jamais réellement suppri$
Spec :
docs/superpowers/specs/2026-07-17-user-deprovisioning-logout-design.md· Plan :docs/superpowers/plans/2026-07-17-user-deprovisioning-logout.mdDéprovisionnement
users.disabled_at(soft-disable, NULL = actif) +users.scim_user_name.sessions::resolve_user(JOIN users),api_keys::resolve(EXISTS) etbegin_user_transaction(garde fusionnée dans leset_config, exécutée enindara_controlavantSET ROLE— échec fermé)$active=true) ou un admin lèvent le flag./scim/v2, monté uniquement siSCIM_TOKENest configuré, mur bearer en temps constant) : provisionnement et dé-provisionnement des utilisateurs —externalId↔oidc_subject, même clé d'upsert que le logi$PATCH /api/admin/users/{id}{"disabled": bool}(garde anti-lock-out), badge + toggle dans l'UI admin. C'est la voie immédiate : la sync SCIM PocketID est horaire (+ boot + manuelle), pas de push événementiel →$Logout fiable
sid,oidc_flow) portentPath=/— sans lui, le navigateur scope la suppression à/api/authet garde le cookie.anonuniquement après le 204 ; sur échec l'état resteauthedet UserMenu affiche un toast (401 ignoré : le handler global a déjà basculé).Validation
-D warnings, tests workspace,sqlx prepare --check, build offline CI, 87 tests frontend, tests DB ignorés (5 deprovisioning + matrice RLS 4/4), boot réel (healthz, mur SCIM 401/200).externalIduniquement, n'émet jamais de PATCH, sync horaire ; optionnel — restreindre le client Indara par groupe dans PocketID pour que la perte d'accès soit poussée par SCIM.Config
SCIM_TOKEN(optionnel) : active/scim/v2. Absent → routes non montées, comportement identique à avant.🤖 Generated with Claude Code