Remplacer les rôles directs d'un utilisateur
PUT /v1/users/{user_id}/roles · permission users:write
Remplace les rôles d'environnement directs de l'utilisateur par role_ids (l'ensemble complet, 50 au maximum ; un tableau vide les supprime tous). Les rôles d'organisation ne peuvent pas être attribués directement ; attribuez-les par l'intermédiaire d'une adhésion à l'organisation. Réécrire le même ensemble ne modifie rien. Un changement marque les familles de refresh tokens de l'utilisateur avec roles_changed (le prochain refresh transporte les nouveaux rôles) et est consigné dans l'audit sous user.updated avec change=roles. Si l'ensemble contient un rôle privilégié (is_privileged), qu'il soit nouvellement ajouté ou conservé, l'identifiant doit aussi posséder roles:write ; retirer un rôle privilégié de l'ensemble exige seulement users:write.
Requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
user_id |
path | oui | Identifiant de l'utilisateur (usr_…). |
role_ids |
string[] | oui | L'ensemble complet des identifiants de rôles d'environnement (rol_…), 50 au maximum. |
Réponse
200 OK avec les nouveaux identifiants de rôles.
{
"role_ids": [
"rol_01j9xr7s1t2w6x8y0z2a4b6c8e"
]
}
Erreurs
| HTTP | code | Quand |
|---|---|---|
| 403 | role_not_assignable |
Un rôle est un rôle d'organisation. |
| 404 | not_found |
L'utilisateur n'existe pas dans cet environnement. |
| 422 | validation_failed |
role_ids est absent, contient un identifiant mal formé ou inconnu (unknown_role), un doublon, ou plus de 50 éléments. |
| 401 | unauthenticated |
L'identifiant est absent, invalide ou révoqué. |
| 403 | insufficient_permissions |
L'identifiant ne possède pas la permission requise. Attribuer un rôle privilégié (is_privileged) exige aussi roles:write ; sans elle, rien n'est écrit et required_permissions liste les deux permissions. |
| 429 | rate_limited |
La limite de débit a été dépassée ; réessayez après la période Retry-After. |
| 503 | service_unavailable |
Une dépendance est temporairement indisponible ; réessayez après la période Retry-After. |
Exemple
curl -i -X PUT "https://api.eu.keenauth.com/v1/users/usr_01j9xh2k6p7q1r3s5t7v9w1x3y/roles" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"role_ids":["rol_01j9xr7s1t2w6x8y0z2a4b6c8e"]}'