# Personel Yetki Grupları

https://dev.wisecp.com/tr/personel-yetki-gruplari

Personelin panelde neyi yapabileceğini belirleyen altı uç.

## Genel Bakış

Yetki grubu, bir personelin panelde **neyi görebileceğini ve neyi değiştirebileceğini** belirler. Her personel bir gruba bağlıdır ve grubun taşıdığı yetkiler onun yetkileridir.

Verilebilecek yetkilerin tam listesi **ayrı bir uçtan** gelir. Bu katalog kuruluma göre değişir: kurulu modüller kendi yetkilerini ekler ve bazıları ülkeye bağlıdır.

Kurulumun **kurucu grubu** korumalıdır: silinemez ve yetki yönetimi hakkını kaybedemez. Bu, kimsenin kendini yetki veremez duruma düşürmemesi içindir.

## Referans

### Yetki Kataloğunu Getirme

get/api/v1/admin/admins/privilege-keys

`Admins/GetPrivilegeKeys` admin

Bir gruba verilebilecek bütün yetkileri gruplanmış hâlde döndürür.

Dönen alanlar data[] — 4 + meta

groupstringYetki grubunun anahtarı.

group_labelstringGrubun okunur adı. Panelin geçerli dilinde gelir.

singleboolGrubun tek bir yetkiden mi oluştuğu. Doğruysa grup adı ile yetki adı aynı şeyi anlatır.

permissionsobject[]Gruptaki yetkiler: her birinin anahtarı ve okunur adı.

totalintToplam grup sayısı. Meta altında döner.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/admins/privilege-keys' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/admins/privilege-keys', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();

const keys = data.flatMap((g) => g.permissions.map((p) => p.key));
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/privilege-keys');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Katalog KURULUMA gore degisir: modullerin actigi yetkiler ve ulkeye bagli olanlar eklenir.
$groups = Api::Admins()->GetPrivilegeKeys()['data'];
```

### Grupları Listeleme

get/api/v1/admin/admins/privileges

`Admins/GetPrivileges` admin

Tanımlı yetki gruplarını ve içlerindeki personeli döndürür.

Sorgu 3

pageintKaçıncı sayfa.

limitintSayfa başına kayıt.

searchstringGrup adında arar.

Dönen alanlar data[] — 5 + meta — 4

idintGrubun numarası.

namestringGrubun adı.

permission_countintGruptaki yetki sayısı.

appointeesobject[]Bu gruptaki personel: numarası ve adı.

is_rootboolKurulumun kurucu grubu mu. Bu grup silinemez.

totalintToplam grup. Meta altında döner.

pageintBulunulan sayfa.

limitintSayfa boyutu.

next_pageintSonraki sayfa.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/admins/privileges' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/admins/privileges', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/privileges');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Liste yetki ADLARINI degil SAYISINI verir; hangi yetkiler oldugunu detaydan okuyun.
$groups = Api::Admins()->GetPrivileges()['data'];
```

### Grup Oluşturma

post/api/v1/admin/admins/privileges

`Admins/CreatePrivilege` admin

Yeni bir yetki grubu tanımlar.

Gövde 2

namestringreqGrubun adı.

permissionsstring[]Gruba verilecek yetki anahtarları. Geçerli anahtarlar katalog ucundan alınır.

Dönen alanlar 201 — data — 4

dataobjectOluşan grup. Detay ucuyla aynı şekildedir.

Hatalar 5

name_required422Grup adı boş.

permissions_exceed_holder422Grup, anahtarınızın arkasındaki hesabın sahip olmadığı izinleri verecekti. Kök yetki grubuna ait bir anahtar sınırlanmaz.

create_failed422Grup oluşturulamadı.

blocked_by_gate422Bir kanca kaydı reddetti.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/admins/privileges' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"Destek Ekibi","permissions":["TICKETS"]}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/admins/privileges', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Support Team',
    permissions: ['ADMIN_CONFIGURE', 'TICKETS'],
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/privileges');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'name'        => 'Support Team',
        'permissions' => ['ADMIN_CONFIGURE', 'TICKETS'],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Yetkisiz bir grup gecerlidir: grup olusur ama uyeleri panelde hicbir sey goremez.
Api::Admins()->CreatePrivilege([
    'name'        => 'Support Team',
    'permissions' => ['TICKETS'],
]);
```

### Grup Detayı

get/api/v1/admin/admins/privileges/{pid}

`Admins/GetPrivilege` admin

Tek bir yetki grubunu taşıdığı yetkilerle döndürür.

Dönen alanlar data — 4

idintGrubun numarası.

namestringGrubun adı.

permissionsstring[]Gruptaki yetki anahtarları.

is_rootboolKurulumun kurucu grubu mu.

Hatalar 2

not_found404Yetki grubu bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/admins/privileges/1' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch(`https://panel.ornek.com/api/v1/admin/admins/privileges/${pid}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/privileges/' . $pid);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Yetki eklemeden ONCE burayi okuyun: yazma cagrisi listeyi ekler degil DEGISTIRIR.
$g = Api::Admins()->GetPrivilege(['pid' => $pid])['data'];
```

### Grubu Güncelleme

patch/api/v1/admin/admins/privileges/{pid}

`Admins/UpdatePrivilege` admin liste yerine geçer

Yetki grubunun adını ve taşıdığı yetkileri değiştirir.

Gövde 2

namestringGrubun adı.

permissionsstring[]Gruptaki yetkilerin tamamı. Gönderdiğiniz liste eskisinin yerine geçer.

Dönen alanlar data — 4

dataobjectGüncel grup. Detay ucuyla aynı şekildedir.

Hatalar 7

not_found404Yetki grubu bulunamadı.

name_required422Grup adı boş.

root_needs_privileges422Kurucu grup yetki yönetimini kaybedemez.

permissions_exceed_holder422Grup, anahtarınızın arkasındaki hesabın sahip olmadığı izinleri verecekti. Kök yetki grubuna ait bir anahtar sınırlanmaz.

save_failed422Grup kaydedilemedi.

blocked_by_gate422Bir kanca kaydı reddetti.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/admins/privileges/3' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"permissions":["TICKETS","SERVICES"]}'
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/admins/privileges/${pid}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    permissions: ['ADMIN_CONFIGURE', 'TICKETS', 'SERVICES'],
  }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/privileges/' . $pid);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['permissions' => ['TICKETS', 'SERVICES']]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Tek yetki eklemek icin MEVCUT listeyi okuyup uzerine ekleyin; yoksa digerleri duser.
$g = Api::Admins()->GetPrivilege(['pid' => $pid])['data'];
$g['permissions'][] = 'SERVICES';

Api::Admins()->UpdatePrivilege(['pid' => $pid, 'permissions' => $g['permissions']]);
```

### Grubu Silme

delete/api/v1/admin/admins/privileges/{pid}

`Admins/DeletePrivilege` admin

Yetki grubunu kaldırır.

Dönen alanlar data — 2

deletedboolSilme çalıştı mı.

idintSilinen grubun numarası.

Hatalar 4

not_found404Yetki grubu bulunamadı.

root_protected422Kurucu grup silinemez.

delete_failed422Grup silinemedi.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/admins/privileges/3' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch(`https://panel.ornek.com/api/v1/admin/admins/privileges/${pid}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/privileges/' . $pid);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Once ICINDEKI personeli tasiyin: gruba bagli hesaplar dayanaksiz kalabilir.
$g = current(array_filter(
    Api::Admins()->GetPrivileges()['data'], fn ($x) => $x['id'] === $pid,
));
if (! $g['appointees']) Api::Admins()->DeletePrivilege(['pid' => $pid]);
```

## Tuzaklar

> **Yetki listesi eklenmez, değiştirilir**
> 
> Güncellemede gönderdiğiniz yetki listesi **eskisinin yerine geçer**. Bir grubu genişletmek isterken yalnız yeni yetkiyi göndermek, o grubun bütün diğer yetkilerini alır ve içindeki personel bir anda panelde neredeyse hiçbir şey göremez. Önce detayı okuyup üzerine ekleyin.

> **Katalog kuruluma göre değişir**
> 
> Yetki anahtarlarının listesi sabit değildir: kurulu modüller kendi yetkilerini ekler ve bazıları **kurulumun ülkesine** bağlıdır. Anahtarları koda gömen bir betik, başka bir kurulumda var olmayan bir yetkiyi vermeye çalışır. Her seferinde katalog ucundan okuyun.

> **Kurucu grup yetki yönetimini kaybedemez**
> 
> Kurucu gruptan yetki yönetimi hakkını almak **reddedilir**. Bu kasıtlı bir kilittir: o hak kaybolsaydı hiçbir hesap bir daha yetki dağıtamaz ve kurulum yönetilemez hâle gelirdi. Grup silinemez de.

> **Grubu silmeden önce içini boşaltın**
> 
> Bir yetki grubunu silmek, o gruba bağlı personeli **dayanaksız bırakabilir**. Liste ucu her grubun içindeki personeli adlarıyla verir; silmeden önce oraya bakıp hesapları başka bir gruba taşıyın. Boş bir grubu silmek güvenlidir.

> **Liste hangi yetkilerin olduğunu söylemez**
> 
> Grup listesi yalnız **yetki sayısını** verir; hangi yetkiler olduğunu değil. İki grup aynı sayıyı taşıyıp tamamen farklı şeyler yapabilir. Bir grubun gerçekten neye izin verdiğini görmek için detay ucundan okuyun.

## İlgili Makaleler

- [Personel Hesapları](https://dev.wisecp.com/tr/personel-hesaplari)
- [Personel Departmanları](https://dev.wisecp.com/tr/personel-departmanlari)
- [API Kimlik Bilgileri](https://dev.wisecp.com/tr/api-kimlik-bilgileri)
