Laravel Package

Persoonsgegevens wissen op verzoek

Wist of anonimiseert alle gegevens van één betrokkene verspreid over meerdere modellen, met een verifieerbaar bewijsspoor. Voor het recht op vergetelheid uit artikel zeventien van de AVG.

Installation

composer require ginkelsoft/laravel-data-right-to-be-forgotten

Wissen op verzoek, niet op termijn

Bewaartermijnen beantwoorden de vraag of data oud genoeg is om weg te halen. Het recht op vergetelheid, artikel zeventien van de AVG, beantwoordt een andere vraag: deze specifieke persoon vraagt mij vandaag om alles over hem te wissen. De aanleiding is niet de klok maar de betrokkene zelf, en de gegevens zitten meestal verspreid over meerdere modellen tegelijk.

In de praktijk is dat lastiger dan het klinkt. Een gebruiker zit in een users-tabel, maar ook in profielen, orders, tickets en logregels. Met de hand alles langslopen is foutgevoelig, en achteraf aantonen dat je echt alles hebt gewist is nog lastiger. Dit package lost beide op.

Markeer de modellen

Je geeft per model aan dat het gegevens van een betrokkene bevat, met een attribuut voor de eenvoudige gevallen of een property wanneer je per veld wilt anonimiseren in plaats van verwijderen. Het model gebruikt de Forgettable-trait en implementeert het bijbehorende contract.

use Ginkelsoft\DataRightToBeForgotten\Attributes\Forgettable;
use Ginkelsoft\DataRightToBeForgotten\Concerns\Forgettable as ForgettableTrait;
use Ginkelsoft\DataRightToBeForgotten\Contracts\Forgettable as ForgettableContract;

#[Forgettable(column: 'user_id', action: 'delete')]
class Order extends Model implements ForgettableContract
{
    use ForgettableTrait;
}

De vergeet-actie

Een command loopt alle gemarkeerde modellen in één keer langs en past per model de ingestelde actie toe op de records van dat ene subject. Eerst droog draaien om te zien wat er zou gebeuren, daarna echt:

php artisan retention:forget 01HXYZ --dry-run
php artisan retention:forget 01HXYZ

De actie is idempotent: een tweede keer vergeten van dezelfde persoon vindt niets meer en schrijft geen dubbele logregels.

Een eigen bewijsspoor

Vergeet-acties komen in een eigen forget_log tabel met een eigen hash-keten, los van het retentie-logboek. Dat is een bewuste keuze: door de twee logboeken te scheiden blijft elke keten op zichzelf kloppend en apart te verifiëren. In het log staat geen identiteit, alleen een onomkeerbare subject-hash, het modeltype, het primary key en de uitgevoerde actie. Genoeg om aan te tonen dat de persoon is vergeten, te weinig om hem alsnog te identificeren.

Wat het bewust niet doet

Het cascadeert niet automatisch. Alleen modellen die je expliciet markeert worden geraakt. Heeft een order regels in een aparte tabel die je niet markeert, dan blijven die staan, dus geef ze hun eigen beleid. Het raakt ook geen back-ups of warehouse-kopieën, dat regel je in een aparte procedure in je DPIA. En of een verzoek tot vergetelheid terecht is, blijft jouw beoordeling.

Samen met inzage in één model

Gebruik je dit package samen met het inzage-package op hetzelfde model, dan definiëren beide een forSubjectQuery en vraagt PHP om een expliciete keuze welke leidend is. Dat los je in het model op met een insteadof-clausule. In de README staat het volledige voorbeeld.

Open source, MIT

Open source onder de MIT-licentie, beschikbaar via GitHub en Packagist. Het bouwt op Compliance Core en deelt daarmee de hash-keten en de anonimisatie-strategieën met de rest van de familie.

composer require ginkelsoft/laravel-data-right-to-be-forgotten

Onderdeel van de AVG-familie naast bewaartermijnen, inzage, toestemming en het datalek-register. Hulp bij het inpassen valt onder maatwerk software en onderhoud en doorontwikkeling.