# Hesap Kısıtlama Kancaları

https://dev.wisecp.com/tr/hesap-kisitlama-kancalari

Kara liste, toplu askıya alma, atıl hesaplar ve toplu iletilerin altı kancası.

## Genel Bakış

Bir hesabın hareket alanını daraltan işlemler burada: kara listeye alma, bütün hizmetleri askıya alma ya da iptal etme, uzun süre kullanılmayan hesabı silme.

Hepsi geniş etkili ve geri alması zordur. Kapılar bu yüzden değerlidir: yanlış bir tıklamayı durdurabilecek tek nokta onlardır.

## Referans

### Kara listeye almayı durdurma

gateuser.blacklist_add

`AdminUsers` yazımdan önce

Bir müşteri kara listeye alınmadan önce çalışır.

Parametreler 3

$user_idintKara listeye alınacak müşteri.

$reasonstringGerekçe kodu: ödeme sahtekârlığı, ters ibraz, kötüye kullanım, istenmeyen ileti, koşul ihlali, yanlış bilgi ya da diğer.

$restrictionsarrayUygulanacak kısıtlar: yeni sipariş, yenileme, destek talebi ve hizmet askıya alma.

Dönüş 1

string|null**Boş olmayan bir metin işlemi engeller** ve hata olarak gösterilir. Boş dönüş devam ettirir.

Dinleyici PHP

```php
Hook::add('gate:user.blacklist_add', 10, function ($user_id, $reason, $restrictions) {
    // Kurumsal musteride ikinci onay isteyin.
    if (Acme::isEnterprise($user_id)) return 'Kurumsal hesap icin yonetici onayi gerekir.';

    return null;
});
```

### Kara liste değişimini izleme

actionuser.blacklist_changed

`AdminUsers` üç durum

Bir müşterinin kara liste durumu değiştikten sonra çalışır.

Parametreler 4

$user_idintEtkilenen müşteri.

$statusstringNe oldu: `add`, `add-2` ya da `remove`. İki farklı ekleme değeri vardır; yalnız birine bakan bir dinleyici diğerini kaçırır.

$reasonstringGerekçe.

$admin_idintİşlemi yapan yönetici.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:user.blacklist_changed', 10,
    function ($user_id, $status, $reason, $admin_id) {
        // Iki ayri ekleme degeri var.
        if ($status !== 'remove') Acme::flagRisk($user_id, $reason);
    });
```

### Toplu hizmet iptalini durdurma

gateuser.services_bulk_cancel

`AdminUsers` hepsi birden

Bir müşterinin **bütün** hizmetleri iptal edilmeden önce çalışır. Tek tıkla verilen, geri alması güç bir karardır.

Parametreler 1

$user_idintHizmetleri iptal edilecek müşteri.

Dönüş 1

string|null**Boş olmayan bir metin işlemi engeller** ve hata olarak gösterilir. Boş dönüş devam ettirir.

Dinleyici PHP

```php
Hook::add('gate:user.services_bulk_cancel', 10, function ($user_id) {
    // Tek tikla butun hizmetler gider.
    if (Acme::hasActiveContract($user_id)) return 'Sozlesmesi suren hesabin hizmetleri toplu iptal edilemez.';

    return null;
});
```

### Toplu askıya almayı izleme

actionuser.services_bulk_suspended

`AdminUsers` hepsi birden

Bir müşterinin bütün hizmetleri askıya alındıktan sonra çalışır.

Parametreler 1

$user_idintHizmetleri askıya alınan müşteri.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:user.services_bulk_suspended', 10, function ($user_id) {
    Acme::notifyAccountFrozen($user_id);
});
```

### Atıl hesabın silinmesini durdurma

gateuser.delete_dormant

`cronjobs` hesap başına

Uzun süre kullanılmayan bir hesap silinmeden önce çalışır. Kanca **aday hesap başına** çalışır: bir turda yüzlerce kez çağrılabilir.

Parametreler 2

$userIdintSilinme adayı hesap.

$uarrayAdayın satırı: adı, adresi ve kaç gündür atıl olduğu.

Dönüş 1

string|null**Boş olmayan bir metin bu hesabı atlatır** ve gerekçe sonuç raporuna geçer. Diğer kapıların aksine bir hata fırlatılmaz: tur kalan adaylarla devam eder.

Dinleyici PHP

```php
Hook::add('gate:user.delete_dormant', 10, function ($userId, $u) {
    // Hesap basina calisir: hafif tutun.
    if (Acme::hasRetentionHold($userId)) return 'saklama yukumlulugu var';

    return null;
});
```

### Toplu ileti alıcılarını değiştirme

filteruser.bulk_recipients

`AdminUsers` sayı ve liste birlikte

Toplu e-posta ya da kısa mesaj için alıcı havuzu kurulduktan sonra çalışır.

Parametreler 4

$resultarraybağlaAlıcı havuzu: sayı ve kişiler. ? İkisini **tutarlı tutun**: listeden kişi çıkarıp sayıyı güncellememek, ekranda yanlış bir alıcı sayısı gösterir.

$dbTypestringKime gönderiliyor: müşteriler ya da personel.

$notifTypestringHangi kanal: e-posta ya da kısa mesaj.

$filtersarrayUygulanan filtreler.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:user.bulk_recipients', 10,
    function (&$result, $dbType, $notifType, $filters) {
        // SAYI ile LISTE tutarli kalmali.
        $result['contacts'] = Acme::dropOptedOut($result['contacts'] ?? []);
        $result['count']    = count($result['contacts']);
    });
```

## Tuzaklar

> **Kara listede iki ayrı ekleme değeri vardır**
> 
> Durum alanı üç değer taşır ve **ikisi eklemedir**. Yalnız birine bakan bir dinleyici, ikinci yolla kara listeye alınan müşteriyi kaçırır. Kaldırmayı sınayıp gerisini ekleme saymak daha güvenlidir.

> **Alıcı listesi ile sayıyı birlikte güncelleyin**
> 
> Toplu alıcı filtresi hem kişileri hem sayıyı taşır. Listeden kişi çıkarıp sayıyı olduğu gibi bırakmak, yöneticiye **yanlış bir alıcı sayısı** gösterir ve gönderim kararını bozar.

## İlgili Makaleler

- [Müşteri Hesabı Kancaları](https://dev.wisecp.com/tr/musteri-hesabi-kancalari)
- [Fatura Yaşam Döngüsü Kancaları](https://dev.wisecp.com/tr/fatura-yasam-dongusu-kancalari)
- [Kancalar Nasıl Çalışır](https://dev.wisecp.com/tr/kancalar-nasil-calisir)
