Aller au contenu principal

Désactiver ou supprimer un utilisateur

Ce guide couvre les deux façons de mettre fin à l'accès d'un utilisateur à une organisation via l'API :

  • Désactivation — suspend l'accès de manière réversible. L'enregistrement de l'utilisateur est conservé et peut être réactivé à tout moment.
  • Suppression — retire définitivement l'utilisateur et son accès.
Prérequis
  • Un jeu valide d'identifiants API
  • Un jeton d'accès valide (voir : Obtenir un jeton) avec le périmètre stonal.user.write
  • Un code d'organisation

Choisir entre la désactivation et la suppression

DésactivationSuppression
Réversible ?Oui — réactivable à tout momentNon — définitive
Enregistrement utilisateurConservé (exposé via disabled)Supprimé
PérimètreL'organisation indiquée dans le chemin de la requêteL'organisation indiquée dans le chemin de la requête
Usage typiqueSuspension temporaire (congé, départ en cours, appareil perdu)Suppression définitive

Étape 1 : Récupérer l'UID de l'utilisateur

Les deux opérations nécessitent l'UID de l'utilisateur. Recherchez l'utilisateur pour l'obtenir.

Voir : Trouver un utilisateur existant

GET /v2/organizations/DEMO/users?pageNumber=1&pageSize=10&q=john.doe@example.com

Si l'utilisateur existe, vous recevrez une réponse 200 avec les détails de l'utilisateur, y compris son UID et son état disabled actuel.


Désactiver un utilisateur

Comment fonctionne la désactivation

La désactivation est limitée à une seule organisation. L'opération positionne un indicateur sur l'accès de l'utilisateur dans l'organisation indiquée dans le chemin de la requête ; l'utilisateur perd immédiatement l'accès aux objets, applications et rapports de cette organisation. Son accès dans toute autre organisation n'est pas affecté.

Comme une identité Stonal est un compte de connexion unique partagé entre toutes les organisations auxquelles la personne appartient, le compte sous-jacent n'est désactivé — empêchant toute connexion — qu'une fois l'utilisateur désactivé dans toutes ses organisations. Dès qu'il est réactivé dans l'une d'elles, la connexion est rétablie.

Quelques points à garder à l'esprit :

  • Toujours visible — les utilisateurs désactivés continuent d'apparaître dans les listes d'utilisateurs avec disabled: true, ce qui vous permet de les retrouver et de les réactiver.
  • Révocation différée — les vérifications de permissions sont mises en cache jusqu'à ~1 minute ; l'accès est donc entièrement révoqué sous ~60 secondes (le même comportement que la suppression).
  • Pas d'auto-désactivation — vous ne pouvez pas désactiver le compte avec lequel vous êtes authentifié (renvoie 409).
  • v2 uniquement — les points de terminaison de désactivation et de réactivation sont disponibles sur l'API v2.

Désactiver l'utilisateur

Voir : Spécification de l'API

POST /v2/organizations/DEMO/users/5dbbc53c-1a22-4f6f-883c-74c04fe905f5/disable
import requests

BASE_URL = "https://api.stonal.io/users"
TOKEN = "<access_token>"

resp = requests.post(
f"{BASE_URL}/v2/organizations/DEMO/users/5dbbc53c-1a22-4f6f-883c-74c04fe905f5/disable",
headers={"Authorization": f"Bearer {TOKEN}"},
)
print(resp.status_code)

Paramètres de chemin :

  • organizationCode : Votre code client (par ex. « DEMO »)
  • uid : UID de l'utilisateur à désactiver (par ex. « 5dbbc53c-1a22-4f6f-883c-74c04fe905f5 »)

Réponses possibles :

  • 204 : L'utilisateur a été désactivé avec succès
  • 404 : L'utilisateur à désactiver n'existe pas
  • 409 : L'utilisateur ne peut pas être désactivé (par exemple, vous ne pouvez pas désactiver votre propre compte)

Réactiver l'utilisateur

Pour rétablir l'accès, appelez le point de terminaison enable avec le même UID. Cela efface l'indicateur de désactivation dans l'organisation et, si le compte de connexion de l'utilisateur avait été désactivé, le rétablit afin qu'il puisse de nouveau s'authentifier.

Voir : Spécification de l'API

POST /v2/organizations/DEMO/users/5dbbc53c-1a22-4f6f-883c-74c04fe905f5/enable
import requests

BASE_URL = "https://api.stonal.io/users"
TOKEN = "<access_token>"

resp = requests.post(
f"{BASE_URL}/v2/organizations/DEMO/users/5dbbc53c-1a22-4f6f-883c-74c04fe905f5/enable",
headers={"Authorization": f"Bearer {TOKEN}"},
)
print(resp.status_code)

Paramètres de chemin :

  • organizationCode : Votre code client (par ex. « DEMO »)
  • uid : UID de l'utilisateur à réactiver (par ex. « 5dbbc53c-1a22-4f6f-883c-74c04fe905f5 »)

Réponses possibles :

  • 204 : L'utilisateur a été réactivé avec succès
  • 404 : L'utilisateur à réactiver n'existe pas

Supprimer un utilisateur

attention

La suppression est définitive et irréversible. Pour révoquer l'accès de façon réversible, désactivez l'utilisateur à la place.

Voir : Spécification de l'API

DELETE /v2/organizations/DEMO/users/019619df-4768-76b7-81e3-2c56d374df46
import requests

BASE_URL = "https://api.stonal.io/users"
TOKEN = "<access_token>"

resp = requests.delete(
f"{BASE_URL}/v2/organizations/DEMO/users/019619df-4768-76b7-81e3-2c56d374df46",
headers={"Authorization": f"Bearer {TOKEN}"},
)
print(resp.status_code)

Paramètres de chemin :

  • organizationCode : Votre code client (par ex. « DEMO »)
  • uid : UID de l'utilisateur à supprimer (par ex. « 019619df-4768-76b7-81e3-2c56d374df46 »)

Réponses possibles :

  • 204 : L'utilisateur a été supprimé avec succès
  • 404 : L'utilisateur à supprimer n'existe pas
  • 409 : L'utilisateur ne peut pas être supprimé en raison d'un conflit (par exemple, une contrainte référentielle)

Notes

  • Toutes les opérations sont limitées à une organisation et n'affectent l'accès qu'au sein de l'organisation indiquée dans le chemin de la requête.
  • L'UID de l'utilisateur doit être obtenu via une recherche préalable ou stocké comme identifiant externe de votre côté.
  • La désactivation et la réactivation sont idempotentes — désactiver un utilisateur déjà désactivé, ou réactiver un utilisateur déjà actif, réussit sans modifier l'état.
  • La suppression est définitive et irréversible ; utilisez la désactivation lorsque vous pourriez avoir besoin de rétablir l'accès ultérieurement.

Gestion des erreurs

Les API Stonal renvoient une enveloppe d'erreur cohérente : { "type", "title", "detail" }. Les échecs de validation (422) remplacent detail par un tableau errors détaillant chaque champ.

StatuttypeSignification
400tag:InvalidBody / tag:InvalidContentTypeLe corps de la requête ou le type de contenu est invalide
401tag:UnauthenticatedJeton d'authentification manquant ou expiré
403tag:ForbiddenAccessLe jeton n'a pas la permission d'accéder à cette ressource
422tag:ValidationErrorUn ou plusieurs champs ont échoué à la validation (voir errors[])
500tag:InternalErrorErreur serveur inattendue
{
"type": "tag:ValidationError",
"title": "Invalid request",
"errors": [
{ "field": "email", "detail": "Email is required" }
]
}