# Panel Personel ve Yetki Kancaları

https://dev.wisecp.com/tr/panel-personel-kancalari

Personel hesapları, yetki grupları, departmanlar ve panel ayarlarının on kancası.

## Genel Bakış

Paneli kimin kullandığıyla ilgili her şey burada: personel hesapları, yetki grupları, destek departmanları ve yöneticinin kendi tercihleri.

Bu kancaların ortak deseni şudur: elinize kaydın tamamı değil, **değişen alanlar** gelir. Hiçbir şey değişmediyse dizi boştur.

## Referans

### Personel kaydının güncellenmesini izleme

actionadmin.staff_updated

`AdminStaff` yalnız değişenler

Bir yönetici hesabı güncellendikten sonra çalışır.

Parametreler 3

$idintGüncellenen yöneticinin kimliği.

$dataarrayAna kayıtta **değişen** alanlar: durumu, adresi, adı, dili, yetkisi ya da parolası. Hiçbiri değişmediyse **boş gelir**: “ne değişti” sorusunun cevabı budur, kaydın tamamı değil.

$infoarrayEk bilgide değişen alanlar: imzası, notları, görünüm tercihi ve telefonu.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.staff_updated', 10, function ($id, $data, $info) {
    // Diziler yalniz DEGISENLERI tasir, kaydin tamamini degil.
    if (isset($data['privilege'])) Acme::auditPrivilegeChange($id, $data['privilege']);
});
```

### Personel silinmesini izleme

actionadmin.staff_deleted

`AdminStaff` yalnız kimlik

Bir yönetici hesabı silindikten sonra çalışır.

Parametreler 1

$idintSilinen yöneticinin kimliği. Kayıt geçilmez: adına ya da adresine ihtiyacınız varsa silme öncesinde saklamış olmanız gerekir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.staff_deleted', 10, function ($id) {
    // Kayit gecilmez: gereken bilgiyi once saklamis olmalisiniz.
    Acme::revokeAllTokens($id);
});
```

### İkinci adım doğrulamanın kapatılmasını izleme

actionadmin.staff_authentication_disabled

`AdminStaff` güvenlik zayıflar

Bir yöneticinin ikinci adım doğrulaması kapatıldıktan sonra çalışır. Bu bir **güvenlik zayıflaması**dır ve genellikle başka bir yönetici yapar.

Parametreler 2

$idintDoğrulaması kapatılan yönetici.

$methodstringKapatılan yöntemin anahtarı.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.staff_authentication_disabled', 10, function ($id, $method) {
    // Guvenlik zayifladi: sessiz kalmayin.
    Acme::alertSecurityTeam($id, $method);
});
```

### Yetki grubunun kaydını izleme

actionadmin.privilege_saved

`AdminStaff` eklemede kimlik güvenilmez

Bir yetki grubu oluşturulduğunda ya da düzenlendiğinde çalışır.

Parametreler 4

$idintYetki grubunun kimliği. ? **Ekleme akışında yeni kimlik değildir** ve sıfır olabilir. Yeni kayıt olup olmadığını buradan değil, işlem türünden anlayın.

$typestringİşlem: `add` ya da `edit`.

$namestringGrubun adı.

$permsstringİzin anahtarları, kaydedildiği virgüllü hâliyle. Dizi değildir: işlemek için ayırmanız gerekir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.privilege_saved', 10, function ($id, $type, $name, $perms) {
    // Yeni kayit oldugunu KIMLIKTEN degil, islem turunden anlayin.
    if ($type === 'add') Acme::noteNewRole($name, explode(',', $perms));
});
```

### Yöneticinin kendi profilini güncellemesini izleme

actionadmin.profile_updated

`AdminStaff` kendi profili

Bir yönetici kendi profilini güncellediğinde çalışır.

Parametreler 3

$admin_idintProfili güncellenen yönetici.

$data_updatesarrayAna kayıtta değişen alanlar: adı ve adresi. Değişiklik yoksa boş gelir.

$info_updatesarrayEk bilgide değişenler: telefon alanları.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.profile_updated', 10,
    function ($admin_id, $data_updates, $info_updates) {
        if (isset($data_updates['email'])) Acme::alertEmailChange($admin_id);
    });
```

### Panel tercihlerinin değişmesini izleme

actionadmin.preferences_updated

`AdminStaff` görünüm tercihleri

Yönetici panelin görünümüyle ilgili tercihlerini değiştirdiğinde çalışır.

Parametreler 3

$admin_idintTercihi değişen yönetici.

$info_setsarrayDeğişen görünüm tercihleri: aydınlık/karanlık ve menü durumu.

$data_setsarrayAna kayıtta değişen veri: dili.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.preferences_updated', 10,
    function ($admin_id, $info_sets, $data_sets) {
        if (isset($data_sets['lang'])) Acme::syncLocale($admin_id, $data_sets['lang']);
    });
```

### Departman kaydını izleme

actionadmin.department_saved

`AdminStaff` eklemede kimlik doğru

Bir destek departmanı oluşturulduğunda ya da düzenlendiğinde çalışır.

Parametreler 3

$idintDepartmanın kimliği. Yetki grubu kancasının aksine burada **ekleme akışında da doğru kimlik** geçer.

$typestringİşlem: `add` ya da `edit`.

$set_dataarrayKaydedilen alanlar: sırası, sorumluları ve simgesi.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.department_saved', 10, function ($id, $type, $set_data) {
    // Burada ekleme akisinda da dogru kimlik gelir.
    Acme::syncDepartment($id, $set_data);
});
```

### Departman silinmesini izleme

actionadmin.department_deleted

`AdminStaff` silme sonrası

Bir destek departmanı silindikten sonra çalışır.

Parametreler 2

$idintSilinen departmanın kimliği.

$detailarraySilinen departmanın kaydı, adı içinde.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.department_deleted', 10, function ($id, $detail) {
    Acme::dropDepartmentRoute($id);
});
```

### Kayıt temizliğini izleme

actionadmin.logs_cleared

`AdminTools` geri alınamaz

Yönetici bir kayıt türünü temizlediğinde çalışır. Silinen kayıtlar **geri gelmez**.

Parametreler 2

$typestringTemizlenen tür: kullanıcı eylemleri, hatalar ya da modül kayıtları.

$datestringKesim tarihi; bu tarihe **kadar ve dâhil** olan kayıtlar silinmiştir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.logs_cleared', 10, function ($type, $date) {
    // Silinenler geri gelmez: kendi arsiviniz varsa oraya not dusun.
    Acme::noteRetention($type, $date);
});
```

### Bildirim ayarlarının kaydını izleme

actionadmin.notification_settings_saved

`AdminSettings` şablon motoru

Bildirim şablonlarının hangi motorla işleneceği değiştiğinde çalışır. Bu ayar **bütün bildirimlerin** nasıl üretildiğini belirler.

Parametreler 2

$enginestringSeçilen motor: yok, Smarty ya da Twig.

$admin_idintDeğişikliği yapan yönetici; oturum yoksa sıfır.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:admin.notification_settings_saved', 10, function ($engine, $admin_id) {
    // Butun bildirimlerin uretimi bu ayara bagli.
    Acme::notifyOps('bildirim motoru: ' . $engine);
});
```

## Tuzaklar

> **Yetki grubu eklemede kimlik güvenilmez**
> 
> Yetki kancasında ekleme akışında geçen kimlik **yeni kaydın kimliği değildir** ve sıfır olabilir. Yeni kayıt olup olmadığını işlem türünden anlayın. Departman kancası bu kusuru taşımaz; orada kimlik her iki akışta da doğrudur.

> **Diziler değişenleri taşır, kaydın tamamını değil**
> 
> Personel, profil ve tercih kancalarındaki diziler yalnız **değişen alanları** içerir. Bir alanın orada olmaması "silindi" demek değil, "dokunulmadı" demektir. Kaydın güncel hâline ihtiyacınız varsa ayrıca okuyun.

## İlgili Makaleler

- [Yönetim Paneli Kancaları](https://dev.wisecp.com/tr/yonetim-paneli-kancalari)
- [Müşteri Hesabı Kancaları](https://dev.wisecp.com/tr/musteri-hesabi-kancalari)
- [Kancalar Nasıl Çalışır](https://dev.wisecp.com/tr/kancalar-nasil-calisir)
