becklyn / ddd-gdpr-bundle
Becklyn 事件源数据的 GDPR 合规性
Requires
- php: >=8.0
- becklyn/ddd-doctrine-bridge: ^2.2.1 || ^3.0
- becklyn/ddd-symfony-bridge: ^2.0 || ^3.0 || ^4.0
- doctrine/doctrine-bundle: ^2.4
- doctrine/doctrine-migrations-bundle: ^3.2
- ramsey/uuid: ^4.0
- symfony/config: ^6.0
- symfony/dependency-injection: ^6.0
- symfony/http-foundation: ^6.0
Requires (Dev)
- pestphp/pest: ^1.21
- pestphp/pest-plugin-mock: ^1.0
README
此 Symfony 扩展包与 Becklyn DDD 框架集成,允许在符合 GDPR 或其他隐私法规要求的情况下,匿名化事件存储中存储的个人信息。
安装
- 运行
composer require becklyn/ddd-gdpr-bundle
- 将以下内容添加到 bundles.php 中
Becklyn\Ddd\PersonalData\BecklynDddGdprBundle::class => ['all' => true],
- 提供了一个 doctrine 迁移。通过运行
php bin/console doctrine:migrations:migrate
来执行它
如何使用
个人值,即需要在事件存储中匿名化的数据,必须以扩展 Becklyn\Ddd\PersonalData\Domain\AbstractPersonalData
类的类的对象形式传递给事件。已提供用于存储字符串和日期时间值的此类
Becklyn\Ddd\PersonalData\Domain\PersonalDate
Becklyn\Ddd\PersonalData\Domain\PersonalNullableDate
Becklyn\Ddd\PersonalData\Domain\PersonalNullableString
Becklyn\Ddd\PersonalData\Domain\PersonalString
在将事件持久化到事件存储之前,扩展包将用指向 personal_data_store
DB 表的引用替换这些对象中包含的值,其中实际值存储。请注意,事件对象本身不会更改,只有它们的序列化形式会被操作。如果您在事件存储中保存事件后将事件传递给应用程序的其他部分,它们仍然包含真实数据。
类似地,扩展包将在通过 EventStore::getAggregateStream
加载事件对象时,将存储在 personal_data_store
中的值恢复到事件对象中。
匿名化
目前,扩展包仅在实际加载事件存储中的事件时匿名化过期的个人数据。这只有在您的应用程序在请求期间在事件加载后刷新实体管理器时才会持久化到数据库。这被视为一种后备方案,以确保没有过期的个人数据离开事件存储;我们建议实现自己的机制,以确保在正确的时间可靠地匿名化个人数据。
这必须通过将 personal_data_store
表中存储的个人值替换为 PersonalData::ANONYMIZED_STRING
常量的值来完成,在撰写本文时为 ANONYMIZED
。个人数据的过期时间存储在 personal_data_store
表的每条记录中。
处理匿名化数据
如前所述,匿名化数据在其内部字符串表示中将具有 ANONYMIZED
的值。对于返回 \DateTimeImmutable
对象的 PersonalDate
和 PersonalNullableDate
,我们决定用 0001-01-01 00:00:00.000000 的日期来表示。您有责任根据您的应用程序的需要处理这些数据。
没有选择 null
来表示匿名化数据,因为它可以是一个有效的、非匿名化的值。