Annotation des donnees personnelles
Savoir quels champs contiennent des donnees personnelles est essentiel pour la conformite en matiere de vie privee et pour comprendre ce que votre application stocke sur les utilisateurs. AuditChain propose deux methodes pour annoter les champs de donnees personnelles sur vos models : l'attribut PHP 8 #[PersonalData] et le tableau $personalData. Cela permet egalement de satisfaire les articles 5(1)(a) et 30 du RGPD, qui exigent des organisations qu'elles documentent exactement quels champs contiennent des donnees personnelles.
Une fois annotes, AuditChain suit automatiquement quels champs de donnees personnelles sont consultes ou modifies dans chaque entree du journal d'audit via la colonne personal_data_accessed. Cela alimente l'export de donnees et l'anonymisation.
Utilisation de l'attribut PHP 8
L'attribut #[PersonalData] vous permet d'annoter des proprietes individuelles directement sur la classe. C'est l'approche recommandee — elle conserve l'annotation a proximite de la definition de la propriete et prend en charge une description optionnelle.
use GrayMatter\AuditChain\Attributes\PersonalData; use GrayMatter\AuditChain\Concerns\HasAuditTrail; use GrayMatter\AuditChain\Contracts\Auditable; class User extends Model implements Auditable { use HasAuditTrail; #[PersonalData(description: 'User email address')] public string $email; #[PersonalData(description: 'Full legal name')] public string $name; #[PersonalData] public string $phone; }
Le parametre description est optionnel. Il sert de documentation pour votre equipe et peut etre utile lors de la generation des registres de traitement des donnees.
Utilisation du tableau
Si vous preferez une approche plus simple ou avez besoin de listes de champs dynamiques, definissez un tableau $personalData sur votre model :
use GrayMatter\AuditChain\Concerns\HasAuditTrail; use GrayMatter\AuditChain\Contracts\Auditable; class Customer extends Model implements Auditable { use HasAuditTrail; protected array $personalData = ['email', 'name', 'phone', 'address']; }
Note : Si le tableau
$personalDataet les attributs#[PersonalData]sont presents simultanement, le tableau est prioritaire. Utilisez une seule approche par model.
Recuperation des champs de donnees personnelles
Appelez getPersonalDataFields() sur n'importe quel model auditable pour obtenir la liste des noms de champs annotes :
$user = new User(); $fields = $user->getPersonalDataFields(); // ['email', 'name', 'phone']
Cette methode est utilisee en interne par exportPersonalData(), exportFullSubjectData() et anonymize(). Vous pouvez egalement l'appeler directement lors de la constitution d'inventaires de traitements ou pour repondre aux demandes des personnes concernees.
Impact sur les journaux d'audit
Lorsqu'un evenement d'audit est enregistre, AuditChain compare les champs modifies aux champs de donnees personnelles. En cas de correspondance, la colonne personal_data_accessed du journal d'audit indique quels champs de donnees personnelles sont concernes :
$user->update(['email' => 'new@example.com', 'role' => 'admin']); // The resulting audit log will contain: // personal_data_accessed => ['email'] // (role is not personal data, so it's not listed)
Pour les evenements retrieved (lorsque le suivi des lectures est active), tous les champs de donnees personnelles sont enregistres comme consultes — puisque le model entier a ete charge.
Conseils pratiques
- Soyez exhaustif : Incluez tous les champs susceptibles d'identifier ou de se rapporter a une personne physique — noms, emails, numeros de telephone, adresses, adresses IP, identifiants.
- N'annotez pas les champs non personnels : Des champs comme
role,statusoucreated_atne sont generalement pas des donnees personnelles. Une sur-annotation dilue l'utilite du suivi. - Revisez periodiquement : Lorsque vous ajoutez de nouvelles colonnes a un model, verifiez si elles doivent etre annotees comme donnees personnelles.