# Kişisel Veri Kancaları

https://dev.wisecp.com/tr/kisisel-veri-kancalari

Rıza, dışa aktarma, veri talepleri ve kimlik belgelerinin dokuz kancası.

## Genel Bakış

Kişisel verinin dört anı burada: müşteri **rıza verir**, verisini **dışa aktarır**, **silinmesini ister** ve kimlik **belgesi gönderir**.

İki kancada içerik bilerek geçilmez: dışa aktarımda belge, gönderimde kimlik belgesi. Dinleyicilere yalnız özet verilir, çünkü veriyi ikinci bir yere yaymak amacın kendisine aykırıdır.

## Referans

### Rıza değişimini izleme

actionuser.gdpr_consent_changed

`AccountPrivacy` kanıt damgası

Müşteri veri işleme rızasını verdiğinde ya da geri çektiğinde çalışır. Yalnız **gerçek geçişte** çalışır: aynı değeri yeniden kaydetmek kancayı tetiklemez.

Parametreler 3

$uidintRızası değişen müşteri.

$statusintYeni durum: bir rıza verildi, sıfır geri çekildi. Kanca yalnız geçişte çalıştığı için önceki durum daima bunun tersidir.

$given_atstringKayda yazılan damga. Rıza kanıtının zaman bileşenidir: veritabanından yeniden okumak yerine bu değeri kullanın.

Dönüş 1

voidDönüş yoksayılır. Rıza çoktan yazılmıştır; engellemek için kullanılamaz.

Dinleyici PHP

```php
Hook::add('action:user.gdpr_consent_changed', 10, function ($uid, $status, $given_at) {
    // Kanit damgasini buradan alin, DB'den yeniden okumayin.
    Acme::recordConsent($uid, (bool) $status, $given_at);
});
```

### Veri dışa aktarımını izleme

actionuser.gdpr_exported

`AccountPrivacy` yalnız özet

Müşteri kendi verisini dışa aktardığında çalışır.

Parametreler 2

$uidintVerisini aktaran müşteri.

$metaarrayAktarımın **özeti**: biçimi ve boyutu. Belgenin içeriği geçilmez, bilerek: müşterinin bütün kişisel verisini dinleyicilere dağıtmak olurdu.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:user.gdpr_exported', 10, function ($uid, $meta) {
    // Belge icerigi bilerek gecilmez.
    Acme::auditExport($uid, (int) ($meta['size'] ?? 0));
});
```

### Veri talebinin açılmasını izleme

actionuser.gdpr_request_created

`AccountPrivacy` iki tür

Müşteri silme ya da anonimleştirme talebi açtığında çalışır.

Parametreler 2

$uidintTalebi açan müşteri.

$typestringTalep türü: `remove` silme, `anonymize` anonimleştirme.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:user.gdpr_request_created', 10, function ($uid, $type) {
    Acme::openComplianceCase($uid, $type);
});
```

### Veri talebinin iptalini izleme

actionuser.gdpr_request_cancelled

`AccountPrivacy` vazgeçme

Müşteri açtığı talepten vazgeçtiğinde çalışır.

Parametreler 2

$uidintTalebin sahibi.

$request_idintİptal edilen talebin kimliği.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:user.gdpr_request_cancelled', 10, function ($uid, $request_id) {
    Acme::closeComplianceCase($request_id);
});
```

### Veri talebinin işlenmesini izleme

actionuser.gdpr_processed

`AdminUsers` geri alınamaz

Bir veri talebi işlendikten sonra çalışır. **Silme ve anonimleştirme geri alınamaz**: bu noktada veri çoktan gitmiştir.

Parametreler 3

$request_idintTalebin kimliği.

$user_idintİlgili müşteri.

$actionstringİşlenen eylem: silme, anonimleştirme, yok etme ya da iptal.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:user.gdpr_processed', 10, function ($request_id, $user_id, $action) {
    // Veri gitti: kendi kopyanizi da temizleyin.
    if ($action !== 'cancelled') Acme::purgeMirror($user_id);
});
```

### Belge gönderimini izleme

actionuser.documents_submitted

`AccountDocuments` yalnız başvuru

Müşteri kimlik belgelerini gönderdiğinde çalışır.

Parametreler 2

$uidintBelgeleri gönderen müşteri. Bu akış yalnız kişinin kendisi içindir: alt kullanıcı başkası adına belge gönderemez.

$doc_metaarrayGönderimin özeti. ? **Belge içeriği yoktur**, yalnız başvuru ve üstveri. Kimlik belgesini dinleyicilere dağıtmamak için bilerek böyle yapılmıştır.

Dönüş 1

voidDönüş yoksayılır. Kayıtlar çoktan yazılmıştır; gönderimi engellemek için kullanılamaz.

Dinleyici PHP

```php
Hook::add('action:user.documents_submitted', 10, function ($uid, $doc_meta) {
    // Belge icerigi yok, yalniz basvuru.
    Acme::queueReview($uid);
});
```

### Belge alan tiplerini genişletme

filteruser.document_field_types

`AdminUsers` bağla geçer

Belge alanı tanımlanırken sunulan tip listesi kurulduğunda çalışır. Kendi alan tipinizi buraya eklersiniz.

Parametreler 1

$typesarraybağlaTip anahtarı karşılık görünen etiket.

Dönüş 1

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

Dinleyici PHP

```php
Hook::add('filter:user.document_field_types', 10, function (&$types) {
    $types['acme-iban'] = 'Acme IBAN dogrulama';
});
```

### Belge alanı tanımını değiştirme

filteruser.document_field_input

`AdminUsers` bağla geçer

Belge alanı kaydedilmeden önce çalışır. Kendi eklediğiniz tipin ayarlarını burada tamamlarsınız.

Parametreler 2

$valuesarraybağlaYazılacak satır: durumu, tipi, etiketleri, ayarları, kabul edilen uzantılar ve boyut sınırı.

$typestringbağlaAlan tipi. Kancanın kendi tipinizde olup olmadığını anlaması içindir: önce buna bakın.

Dönüş 1

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

Dinleyici PHP

```php
Hook::add('filter:user.document_field_input', 10, function (&$values, &$type) {
    // Once kendi tipiniz mi diye bakin.
    if ($type !== 'acme-iban') return;

    $values['max_size'] = 512;
});
```

### Belge kayıtları görünümünü değiştirme

filteruser.document_records_view

`AdminUsers` kişisel veri

Yönetici bir müşterinin belgelerine baktığında, kayıtlar ekrana gitmeden önce çalışır.

Parametreler 2

$recordsarraybağlaBelge kayıtları: alan adı, değeri, durumu. Kimlik bilgisi taşır: maskeleme yapacaksanız yeri burasıdır.

$user_idintbağlaİncelenen müşteri; okuma amaçlıdır.

Dönüş 1

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

Dinleyici PHP

```php
Hook::add('filter:user.document_records_view', 10, function (&$records, &$user_id) {
    // Kimlik numarasini yetkisiz gozden gizleyin.
    if (Acme::canSeeFullId()) return;

    foreach ($records as $i => $r) $records[$i]['field_value'] = Acme::mask($r['field_value'] ?? '');
});
```

## Tuzaklar

> **İçerik bilerek geçilmez**
> 
> Dışa aktarım kancası belgenin kendisini, belge kancası kimlik evrakını **taşımaz**; yalnız özet verir. Bu bir eksiklik değil tasarımdır: veriyi dinleyicilere dağıtmak, korumanın amacına aykırıdır. İçeriğe ihtiyacınız varsa kendi izinli yolunuzdan okuyun.

> **İşlenen talep geri alınamaz**
> 
> Silme ve anonimleştirme kancası çalıştığında veri **çoktan gitmiştir**. Kendi kopyanızı da temizlemeniz gerekir; yoksa müşterinin verisi sizde kalmaya devam eder.

## İ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)
