Personel Hesapları

1.7k görüntülenme Markdown

Panele giren personel hesaplarını açan, güncelleyen ve kaldıran altı uç.

Genel Bakış

Personel hesapları panele girebilen kişilerdir; müşterilerden ayrı bir kayıt kümesinde yaşarlar ama e-posta adresleri müşterilerle aynı havuzu paylaşır.

Bir hesabın ne yapabileceğini yetki grubu belirler; hangi destek taleplerini göreceğini ise atandığı departmanlar. İkisi de ayrı uçlardan yönetilir.

Kurulumun kurucu hesabı korumalıdır: silinemez ve yetkisi değiştirilemez. Kendi hesabınız da kısmen korumalıdır; kendi yetkinizi düşüremez ve kendinizi silemezsiniz.

Referans

Personeli Listeleme

get/api/v1/admin/admins
Admins/GetStaff admin

Panele giriş yapabilen hesapları döndürür.

Sorgu 3
pageintKaçıncı sayfa.
limitintSayfa başına kayıt. Bir ile yüz arasına çekilir.
searchstringAd, e-posta, telefon ve numarada arar.
Dönen alanlar data[] — 7 + meta — 4
idintPersonelin numarası.
full_namestringAdı soyadı.
emailstringE-posta adresi.
statusstringHesabın etkin olup olmadığı.
privilege_namestringBağlı olduğu yetki grubunun adı.
departmentsstring[]Atandığı departmanların adları.
is_rootboolKurulumun kurucu hesabı mı. Bu hesap silinemez ve yetkisi değiştirilemez.
totalintToplam personel. Meta altında döner.
pageintBulunulan sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa. Sıfır, son sayfadasınız demektir.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/admins' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/admins', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Kurucu hesap ayri isaretlenir; toplu islem yazarken onu disarida birakin.
$staff = Api::Admins()->GetStaff()['data'];
$rest  = array_filter($staff, fn ($s) => ! $s['is_root']);

Personel Hesabı Açma

post/api/v1/admin/admins
Admins/CreateStaff admin panel erişimi verir

Panele girebilecek yeni bir hesap açar.

Gövde 15
full_namestringreqAdı soyadı.
emailstringreqE-posta adresi. Personel ve müşteriler arasında benzersiz olmalı.
passwordstringreqHesabın parolası.
password_confirmationstringreqParolanın tekrarı.
privilegeintreqBağlanacağı yetki grubu. Hesabın panelde ne yapabileceğini bu belirler.
langstringreqPanelin dili.
display_namestringMüşterilere gösterilen ad. Boş bırakılırsa gerçek ad görünür.
phonestringTelefon numarası. Yeterince uzunsa biçimlenir ve benzersizliği denetlenir.
departmentsint[]Atanacağı departmanlar. Güncellemede gönderilmezse mevcut atamalar korunur.
signatureobject | stringDil başına yanıt imzası.
notesstringHesaba düşülen not.
display_modestringPanelin görünüm tercihi.
menu_statestringMenünün açılış biçimi.
statusstringHesabın etkin olup olmadığı. Öntanımlı olarak etkindir.
avatarstringProfil görseli.
Dönen alanlar 201 — data
dataobjectAçılan hesap. Detay ucuyla aynı şekildedir.
Hatalar 4
staff_save_failed422E-posta ya da telefon kullanımda, yetki grubu geçersiz ya da parolalar uyuşmuyor.
create_failed422Hesap açılamadı.
blocked_by_gate422Bir kanca hesabı reddetti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/admins' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"full_name":"Ayse Yilmaz","email":"[email protected]","password":"G1zliParola","password_confirmation":"G1zliParola","privilege":2,"lang":"tr"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/admins', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    full_name: 'John Doe',
    email: '[email protected]',
    password: secret,
    password_confirmation: secret,
    privilege: 2,
    lang: 'en',
    departments: [1, 2],
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'full_name'             => 'John Doe',
        'email'                 => '[email protected]',
        'password'              => $secret,
        'password_confirmation' => $secret,
        'privilege'             => 2,
        'lang'                  => 'en',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Yetki grubu hesabin NE YAPABILECEGINI belirler; en genis grubu varsayilan yapmayin.
Api::Admins()->CreateStaff([
    'full_name'             => 'John Doe',
    'email'                 => $email,
    'password'              => $secret,
    'password_confirmation' => $secret,
    'privilege'             => $limitedGroupId,
    'lang'                  => 'en',
]);

Personel Detayı

get/api/v1/admin/admins/{id}
Admins/GetStaffMember admin

Tek bir personel hesabını bütün alanlarıyla döndürür.

Dönen alanlar data — 21
idintPersonelin numarası.
statusstringHesabın etkin olup olmadığı.
full_namestringAdı soyadı.
namestringAdı.
surnamestringSoyadı.
emailstringE-posta adresi.
phonestringTelefon numarası.
langstringPanelin dili.
privilege_idintBağlı olduğu yetki grubu.
gsm_ccstringCep telefonunun ülke kodu.
gsmstringCep telefonu numarası.
residence_addressstringAdresi.
notesstringHesaba düşülen not.
display_modestringPanelin görünüm tercihi.
menu_statestringMenünün açılış biçimi.
signatureobject | stringDil başına yanıt imzası.
has_2faboolİki adımlı doğrulamanın açık olup olmadığı.
authentication_methodsstring[]Açık olan doğrulama yöntemlerinin adları. Yalnız adları döner, hiçbir gizli değer dönmez.
department_idsint[]Atandığı departmanların numaraları.
avatar_urlstringProfil görselinin adresi.
is_rootboolKurulumun kurucu hesabı mı.
Hatalar 2
not_found404Personel bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/admins/5' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch(`https://panel.ornek.com/api/v1/admin/admins/${id}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/' . $id);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Parola HICBIR KOSULDA donmez; dogrulama tarafinda da yalniz yontem ADLARI gorunur.
$s = Api::Admins()->GetStaffMember(['id' => $id])['data'];

Personeli Güncelleme

patch/api/v1/admin/admins/{id}
Admins/UpdateStaff admin bazı alanlar korunur

Personel hesabının gönderdiğiniz alanlarını değiştirir.

Gövde 15
full_namestringAdı soyadı.
emailstringE-posta adresi.
passwordstringYeni parola. Tekrarıyla birlikte gönderilir.
password_confirmationstringYeni parolanın tekrarı.
privilegeintYetki grubu. Kurucu hesapta ve kendi hesabınızda yok sayılır.
langstringPanelin dili.
display_namestringMüşterilere gösterilen ad. Boş bırakılırsa gerçek ad görünür.
phonestringTelefon numarası. Yeterince uzunsa biçimlenir ve benzersizliği denetlenir.
departmentsint[]Atanacağı departmanlar. Güncellemede gönderilmezse mevcut atamalar korunur.
signatureobject | stringDil başına yanıt imzası.
notesstringHesaba düşülen not.
display_modestringPanelin görünüm tercihi.
menu_statestringMenünün açılış biçimi.
statusstringHesabın etkin olup olmadığı. Öntanımlı olarak etkindir.
avatarstringProfil görseli.
Dönen alanlar data — 21
dataobjectGüncel hesap. Detay ucuyla aynı şekildedir.
Hatalar 3
not_found404Personel bulunamadı.
staff_save_failed422E-posta ya da telefon kullanımda, yetki grubu geçersiz ya da parolalar uyuşmuyor.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/admins/5' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"full_name":"Ayse Kaya","departments":[1,3]}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/admins/${id}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ full_name: 'Jane Doe', departments: [1, 3] }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/' . $id);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['full_name' => 'Jane Doe', 'departments' => [1, 3]]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Departman listesi gonderilirse YERINE GECER; korumak istiyorsaniz alani hic gondermeyin.
Api::Admins()->UpdateStaff(['id' => $id, 'full_name' => 'Jane Doe']);

Personeli Silme

delete/api/v1/admin/admins/{id}
Admins/DeleteStaff admin

Personel hesabını kaldırır.

Dönen alanlar data — 2
deletedboolSilme çalıştı mı.
idintSilinen hesabın numarası.
Hatalar 6
not_found404Personel bulunamadı.
root_protected422Kurucu hesap silinemez.
self_protected422Kendi hesabınızı silemezsiniz.
delete_failed422Hesap silinemedi.
blocked_by_gate422Bir kanca silmeyi reddetti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/admins/6' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/admins/${id}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/' . $id);
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);
// Ayrilan personelde silmek yerine hesabi KAPATIN: gecmis islemlerin sahibi kayitli kalir.
Api::Admins()->UpdateStaff(['id' => $id, 'status' => 'passive']);

İkinci Adımı Kapatma

post/api/v1/admin/admins/{id}/disable-authentication
Admins/DisableStaffAuthentication admin panelde parola ister

Personelin girişteki ikinci doğrulama adımını kaldırır. Açık oturumları kapanır ve güvenilen cihazları silinir.

Gövde 1
methodstringreqKapatılacak doğrulama yöntemi. Adı personel detayındaki listeden alınır.
Dönen alanlar data — 2
disabledboolKapatma çalıştı mı.
methodstringKapatılan yöntem.
Hatalar 2
not_found404Personel bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/admins/5/disable-authentication' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"method":"Totp"}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/admins/${id}/disable-authentication`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ method: 'Totp' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/admins/' . $id . '/disable-authentication');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['method' => 'Totp']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Panelde bu islem YONETICI PAROLASI ister; API'de tek kapi anahtarin kapsamidir.
$s = Api::Admins()->GetStaffMember(['id' => $id])['data'];
foreach ($s['authentication_methods'] as $m)
    Api::Admins()->DisableStaffAuthentication(['id' => $id, 'method' => $m]);

Tuzaklar

E-posta havuzu müşterilerle ortaktır

Bir personel hesabının e-postası yalnız diğer personel arasında değil, müşteriler arasında da benzersiz olmalıdır. Aynı adresle hem müşteri hem personel hesabı açılamaz. Kendi ekibini müşteri olarak da kaydeden bir kurulumda bu, beklenmedik bir çakışma hatası olarak karşınıza çıkar.

Kendi yetkinizi düşüremezsiniz

Güncelleme çağrısı, kurucu hesapta ve kendi hesabınızda yetki grubu ile durum alanlarını sessizce yok sayar. Yani kendinizi yanlışlıkla kilitleyemezsiniz, ama gönderdiğiniz değerin uygulandığını da varsayamazsınız. Yanıttaki yetki grubunu okuyup beklediğinizle karşılaştırın.

Departman listesi yerine geçer

Güncellemede departman listesi gönderirseniz mevcut atamaların yerine geçer. Bir departman eklemek isterken yalnız onu göndermek diğerlerini düşürür. Mevcut atamaları korumak istiyorsanız alanı hiç göndermeyin; eklemek istiyorsanız önce detayı okuyup birleştirin.

İkinci adımı kapatmak panelden kolaydır

Panelde bir personelin ikinci doğrulama adımını kapatmak yönetici parolası ister; bu uçta tek kapı anahtarın kapsamıdır. Yani bu kapsamı taşıyan bir anahtar, bir hesabın ek korumasını doğrudan kaldırabilir. Anahtarları dağıtırken bu kapsamı ayrı değerlendirin.

Ayrılan personeli silmek yerine kapatın

Bir personeli silmek hesabı ortadan kaldırır; oysa yaptığı işlemler, yazdığı yanıtlar ve düştüğü notlar kayıtlarda ona işaret etmeye devam eder. Hesabı kapatmak girişi engeller ve geçmişi okunur bırakır. Kurucu hesap ve kendi hesabınız zaten silinemez.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.