Définir les rôles d'un membre

PUT /fapi/v1/organizations/{org_id}/memberships/{membership_id}/roles · appelé depuis l'hôte de connexion de l'environnement

Remplace les rôles d'une adhésion par un ensemble complet, pour un écran de profil d'organisation. L'ensemble ne couvre que les rôles visibles par vous dans cette organisation : ses propres rôles et les rôles de l'environnement ouverts aux administrateurs de l'organisation. Les autres rôles du membre sont conservés. Un ensemble vide supprime tous les rôles visibles ; si le membre n'en a plus aucun, le rôle par défaut de l'organisation lui est attribué.

Exige le cookie __Host-idp_session de l'utilisateur authentifié avec un Origin exact, ou un jeton d'accès à l'API frontale d'une application de premier niveau (Authorization: DPoP <token> avec une preuve DPoP ; voir Jeton d'accès à l'API frontale). L'utilisateur doit être un membre actif de l'organisation disposant de l'autorisation idp_members:update_roles. Un utilisateur qui n'est pas membre reçoit 404 not_found ; un membre sans cette autorisation reçoit 403 insufficient_permissions.

Règles d'attribution :

Avec @keenauth/js : await keenauth.organizations.setMemberRoles(orgId, membershipId, [roleId], { expectedVersion: 3 }).

Requête

En-têtes :

En-tête Obligatoire Description
Idp-Client oui Identifiant du SDK.
Origin oui, avec le cookie https://<hôte de connexion>.
If-Match non Une seule version, "<version>", issue de la liste des membres. Une version qui ne correspond pas, ou plusieurs versions, renvoient 412 precondition_failed.

org_id : l'identifiant de l'organisation (org_…). membership_id : l'identifiant de l'adhésion (mem_…).

Corps : {"role_ids": ["rol_…"]}, 50 rôles au maximum. role_ids est obligatoire ; [] est un ensemble valide.

Réponse

200 OK avec l'adhésion (les mêmes champs qu'un élément de la liste des membres) et ETag: "<version>".

Erreurs

Statut Code Quand
400 malformed_request If-Match est mal formé.
400 unknown_field Le corps contient un champ autre que role_ids.
401 unauthenticated Aucun cookie de session ou jeton valide.
403 insufficient_permissions L'utilisateur ne dispose pas de idp_members:update_roles dans l'organisation.
403 role_not_assignable Une règle d'attribution ci-dessus refuse la modification.
403 origin_not_allowed L'Origin ne correspond pas.
404 not_found Aucune organisation, adhésion ou rôle de ce type pour cet utilisateur ; un identifiant inconnu, mal formé ou étranger donne la même réponse.
409 last_org_admin La modification laisserait l'organisation sans administrateur actif.
409 role_limit_reached Le membre détiendrait plus de 50 rôles.
409 organization_disabled L'organisation est désactivée ou en attente de suppression (organization_pending_deletion).
412 precondition_failed If-Match ne correspond pas à la version actuelle de l'adhésion.
422 validation_failed role_ids est absent, trop long ou contient un identifiant mal formé.
503 service_unavailable Service temporairement indisponible ; réessayez après Retry-After.

Exemple

curl -X PUT "https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/memberships/mem_01jbz6x8kq3m2n4p5r6s7t8v9b/roles" \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/json" \
  -H 'If-Match: "3"' \
  -b cookies.txt \
  -d '{"role_ids":["rol_01jbz6x8kq3m2n4p5r6s7t8v9w"]}'
{
  "id": "mem_01jbz6x8kq3m2n4p5r6s7t8v9b",
  "user_id": "usr_01jbz6x8kq3m2n4p5r6s7t8v9c",
  "status": "active",
  "roles": [{ "role_id": "rol_01jbz6x8kq3m2n4p5r6s7t8v9w", "source": "admin_api" }],
  "created_at": "2026-11-03T09:00:00Z",
  "activated_at": "2026-11-03T09:00:00Z",
  "expires_at": null,
  "updated_at": "2026-11-03T10:00:00Z",
  "version": 4
}

Données personnelles

Ce point de terminaison traite des données personnelles : adhésions et invitations à une organisation. Données personnelles dans les API KeenAuth décrit ce qui est stocké, la durée de conservation et la suppression. Ne transmettez aucune donnée sensible (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.