
# Bir üyenin rollerini ayarlayın

`PUT /fapi/v1/organizations/{org_id}/memberships/{membership_id}/roles` · ortamın giriş yap ana makinesinden çağrılır

Bir üyeliğin rollerini, kuruluş profil ekranı için tam bir kümeyle değiştirir. Küme yalnızca bu kuruluşta görebildiğiniz rolleri kapsar: kuruluşun kendi rolleri ile kuruluş yöneticilerine açık ortam rolleri. Üyenin diğer rolleri korunur. Boş bir küme, görebildiğiniz tüm rolleri kaldırır; üyenin hiç rolü kalmazsa kuruluşun varsayılan rolü atanır.

Kimliği doğrulanmış kullanıcının tam eşleşen `Origin` değerine sahip `__Host-idp_session` çerezi veya birinci taraf bir uygulamanın ön API erişim belirteci (DPoP kanıtıyla `Authorization: DPoP <token>`; bkz. [Ön API erişim belirteci](/docs/api/fapi/front-api-token)) gereklidir. Kullanıcı, kuruluşun etkin bir üyesi olmalı ve `idp_members:update_roles` iznine sahip olmalıdır. Üye olmayan bir kullanıcı `404 not_found` yanıtı alır; bu izne sahip olmayan bir üye `403 insufficient_permissions` yanıtı alır.

Atama kuralları:

- Atadığınız her rolün her izni, sizin de sahip olduğunuz bir izin olmalıdır.
- Yalnızca yönetici rolüne sahip bir üye, ayrıcalıklı bir rol atayabilir.
- Kendi rollerinizi değiştiremezsiniz.
- Son etkin yönetici, yönetici rolünü kaybedemez (`409 last_org_admin`).

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

## İstek

Üstbilgiler:

| Üstbilgi | Zorunlu | Açıklama |
| --- | --- | --- |
| `Idp-Client` | evet | SDK tanımlayıcısı. |
| `Origin` | evet, çerezle birlikte | `https://<sign-in host>`. |
| `If-Match` | hayır | Üye listesinden alınan tek bir sürüm, `"<version>"`. Eşleşmeyen bir sürüm ya da birden fazla sürüm `412 precondition_failed` döndürür. |

`org_id`: kuruluş tanımlayıcısı (`org_…`). `membership_id`: üyelik tanımlayıcısı (`mem_…`).

Gövde: `{"role_ids": ["rol_…"]}`, en fazla 50 rol. `role_ids` zorunludur; `[]` geçerli bir kümedir.

## Yanıt

`200 OK`, üyelik ile birlikte ([üye listesi](/docs/api/fapi/organizations/memberships/list) öğesiyle aynı alanlar) ve `ETag: "<version>"`.

## Hatalar

| Durum | Kod | Ne zaman |
| --- | --- | --- |
| 400 | `malformed_request` | `If-Match` hatalı biçimlendirilmişse. |
| 400 | `unknown_field` | Gövde, `role_ids` dışında bir alan içeriyorsa. |
| 401 | `unauthenticated` | Geçerli bir oturum çerezi ya da belirteci yoksa. |
| 403 | `insufficient_permissions` | Kullanıcının kuruluşta `idp_members:update_roles` izni yoksa. |
| 403 | `role_not_assignable` | Yukarıdaki bir atama kuralı değişikliği reddediyorsa. |
| 403 | `origin_not_allowed` | `Origin` eşleşmiyorsa. |
| 404 | `not_found` | Bu kullanıcı için kuruluş, üyelik ya da rol yoksa; bilinmeyen, hatalı biçimlendirilmiş veya başka bir kaynağa ait tanımlayıcı da aynı yanıtı verir. |
| 409 | `last_org_admin` | Değişiklik, kuruluşu etkin bir yöneticisiz bırakacaksa. |
| 409 | `role_limit_reached` | Üye 50'den fazla role sahip olacaksa. |
| 409 | `organization_disabled` | Kuruluş devre dışıysa ya da silinmeyi bekliyorsa (`organization_pending_deletion`). |
| 412 | `precondition_failed` | `If-Match`, üyeliğin geçerli sürümünü belirtmiyorsa. |
| 422 | `validation_failed` | `role_ids` eksikse, çok uzunsa ya da hatalı biçimlendirilmiş bir tanımlayıcı içeriyorsa. |
| 503 | `service_unavailable` | Geçici olarak kullanılamıyorsa; `Retry-After` süresinden sonra yeniden deneyin. |

## Örnek

```bash
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"]}'
```

```json
{
  "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
}
```

## Kişisel veriler

Bu uç nokta kişisel veri içerir: kuruluş üyelikleri ve davetler. [KeenAuth API'lerinde kişisel veriler](/docs/policies/personal-data) bölümünde neyin saklandığı, ne kadar süreyle tutulduğu ve nasıl silindiği açıklanmaktadır. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.
