
# Définir les autorisations d'un rôle

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

Remplace l'ensemble des autorisations d'un rôle de l'organisation. Seules les autorisations que l'environnement autorise pour les rôles d'organisation peuvent être utilisées, et les administrateurs ne peuvent accorder que les autorisations qu'ils détiennent eux-mêmes. Les autorisations et les API ne peuvent pas être créées ici. Nécessite le cookie `__Host-idp_session` de l'utilisateur authentifié ; si le cookie est absent, expiré ou révoqué, renvoie `401 unauthenticated`. Une application de première partie sur une autre origine peut à la place envoyer son jeton d'accès à l'API frontale (`Authorization: DPoP <token>` avec une preuve DPoP ; voir [Jeton d'accès à l'API frontale](/docs/api/fapi/front-api-token)). L'utilisateur doit être membre actif de l'organisation avec l'autorisation `idp_roles:manage`. Un utilisateur qui n'est pas membre reçoit `404 not_found`, afin que l'existence de l'organisation ne soit pas divulguée ; un membre sans cette autorisation reçoit `403 insufficient_permissions`. Les rôles d'organisation doivent être activés pour l'environnement et inclus dans son offre.

## Requête

En-têtes :

| En-tête | Obligatoire | Description |
| --- | --- | --- |
| `Idp-Client` | oui | Identifiant du SDK. |
| `Origin` | oui | Doit être exactement `https://<hôte de connexion>`. |
| `Content-Type` | avec un corps | `application/json`. |
| `If-Match` | non | `"<version>"` du rôle tel que lu en dernier ; si le rôle a changé depuis, renvoie `412 precondition_failed` et rien ne change. |

`org_id` : l'identifiant de l'organisation (`org_…`). `role_id` : l'identifiant du rôle (`rol_…`).

Corps :

| Champ | Obligatoire | Description |
| --- | --- | --- |
| `permission_ids` | oui | L'ensemble complet, au maximum 100 identifiants d'autorisation (`perm_…`) ; `[]` retire toutes les autorisations. |

## Réponse

`200 OK` avec un nouvel `ETag` ; le corps est le rôle (voir [Obtenir un rôle de l'organisation](./get)).

## Erreurs

| Statut | Code | Quand |
| --- | --- | --- |
| 401 | `unauthenticated` | Aucun cookie de session valide. |
| 403 | `origin_not_allowed` | `Origin` est absent ou incorrect. |
| 403 | `insufficient_permissions` | L'utilisateur ne dispose pas de `idp_roles:manage` dans l'organisation. |
| 403 | `plan_feature_unavailable` | L'offre de l'environnement n'inclut pas les rôles d'organisation (`feature`, `required_plan`). |
| 403 | `org_custom_roles_disabled` | Les rôles d'organisation sont désactivés pour l'environnement. |
| 403 | `role_not_assignable` | Le rôle, ou le nouvel ensemble, accorde une autorisation que l'utilisateur ne détient pas, ou l'appartenance de l'utilisateur porte le rôle. |
| 404 | `not_found` | Aucune organisation ou aucun rôle d'organisation correspondant pour cet utilisateur ; un rôle d'environnement, un identifiant inconnu, mal formé ou étranger reçoit la même réponse. |
| 409 | `organization_pending_deletion` | L'organisation est programmée pour suppression. |
| 412 | `precondition_failed` | `If-Match` ne désigne pas la version actuelle, ou le rôle a changé pendant le traitement de la requête. |
| 422 | `permission_not_allowed` | Une autorisation n'est pas autorisée pour les rôles d'organisation. |
| 422 | `permission_reserved` | Une autorisation est réservée à la plateforme. |
| 422 | `validation_failed` | La liste est invalide ou trop longue. |
| 503 | `service_unavailable` | Temporairement indisponible ; réessayer après `Retry-After`. |

## Exemple

```bash
curl -X PUT https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/roles/rol_01jbz6x8kq3m2n4p5r6s7t8v9w/permissions \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/json" \
  -b cookies.txt \
  -d '{"permission_ids":["perm_01jbz6x8kq3m2n4p5r6s7t8v9b"]}'
```
