matt9mg/doctrine-encryption-bundle

用于 Symfony 的 Doctrine 加密组件,帮助处理 GDPR 和通用字段加密

dev-master 2017-11-14 09:37 UTC

This package is auto-updated.

Last update: 2024-09-05 18:15:52 UTC


README

SensioLabsInsight

随着 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;
    
    }

以上代码将在 prePersistpreUpdate 时自动加密

Twig

{{ user.firstname | decrypt }}

设计决策

您会注意到没有 postLoad 事件来转换回解密状态。根据 Doctrine 的经验,当实体发生变化时,它会被添加到队列中以便刷新。比如说,如果您有一个有 1000 个用户的账户,每个用户都会被解密,这意味着重新保存。

如何添加自定义 Encryptor

创建一个扩展 Matt9mg\Encryption\Encryptor\EncryptorInterface 的类。然后按照上述配置进行注册。

测试

是的,有大量的单元测试 :)

路线图

  • 表单输入
  • 命令行工具
  • Travis 集成