matt9mg / doctrine-encryption-bundle
用于 Symfony 的 Doctrine 加密组件,帮助处理 GDPR 和通用字段加密
dev-master
2017-11-14 09:37 UTC
Requires
- php: >=7
This package is auto-updated.
Last update: 2024-09-05 18:15:52 UTC
README
随着 GDPR 成为企业关键,这里有一个处理数据加密层的组件。
安装
composer require matt9mg/doctrine-encryption-bundle dev-master
app/AppKernel.php public function registerBundles() { $bundles = [ ... new Matt9mg\Encryption\DoctrineEncryptionBundle(), ... ]; }
配置
基本
基本配置将利用提供的加密库
matt9mg_doctrine_encryption: key: 'an encryption key' iv: 'an encryption iv' suffix: 'an encryption suffix'
完整
matt9mg_doctrine_encryption: key: 'an encryption key' iv: 'an encryption iv' suffix: 'an encryption suffix' method: 'AES-256-CBC' // This is the default setting class: 'Full\Namespace\To\Your\Encryptor' // If not supplied will use the default
使用
在控制器中使用加密服务
use Matt9mg\Encryption\Bridge\Bridge; $this->get(Bridge::class)->encrypt($string) $this->get(Bridge::class)->decrypt($string);
实体注解
use Matt9mg\Encryption\Annotation\Encrypted; class User { /** * @Encrypted() */ private $firstname; }
以上代码将在 prePersist 和 preUpdate 时自动加密
Twig
{{ user.firstname | decrypt }}
设计决策
您会注意到没有 postLoad 事件来转换回解密状态。根据 Doctrine 的经验,当实体发生变化时,它会被添加到队列中以便刷新。比如说,如果您有一个有 1000 个用户的账户,每个用户都会被解密,这意味着重新保存。
如何添加自定义 Encryptor
创建一个扩展 Matt9mg\Encryption\Encryptor\EncryptorInterface 的类。然后按照上述配置进行注册。
测试
是的,有大量的单元测试 :)
路线图
- 表单输入
- 命令行工具
- Travis 集成