kricha / doctrine-audit-bundle
此扩展包为所有 doctrine ORM 数据库相关更改创建审计日志。
Requires
- php: ^8
- babdev/pagerfanta-bundle: ^3.0
- doctrine/orm: ^2.9
- pagerfanta/doctrine-dbal-adapter: ^3.3
- symfony/framework-bundle: ^5.0|^6.0
- twig/twig: ^3.3
README
灵感来源
此扩展包为所有 Doctrine ORM 数据库相关更改创建审计日志
- 包括它们的差异以及关系字段的差异。
- 多对多关系更改,关联和解关联操作。
- 如果令牌存储中有用户,则使用该用户来识别更改的用户。
- 在 flush 期间将审计条目插入到同一事务中,如果发生错误,状态保持干净。
基本上,如果您通过标准 ORM 操作管理这些日志条目,您可以跟踪任何更改。
注意:审计无法跟踪 DQL 或直接 SQL 更新或删除语句的执行。
此扩展包受 damienharper/doctrine-audit-bundle 和 simplethings/entity-audit-bundle 的启发。
安装
使用 Symfony Flex 的应用程序
打开命令行,进入您的项目目录并执行
composer require kricha/doctrine-audit-bundle
不使用 Symfony Flex 的应用程序
步骤 1: 下载扩展包
打开命令行,进入您的项目目录,然后执行以下命令以下载此扩展包的最新稳定版本
composer require kricha/doctrine-audit-bundle
此命令要求您全局安装 Composer,如 Composer 文档中的安装章节所述。
步骤 2: 启用扩展包
然后,通过将其添加到项目 app/AppKernel.php 文件中注册的扩展包列表中来启用扩展包
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Kricha\DoctrineAuditBundle\KrichaDoctrineAuditBundle(), new BabDev\PagerfantaBundle\BabDevPagerfantaBundle(), // only required if you plan to use included viewer/templates ); // ... } // ... }
配置
被审计的实体和属性
默认情况下,DoctrineAuditBundle 不会审计任何实体,您必须配置哪些实体需要被审计。
// app/config/config.yml (symfony < 3.4) // config/packages/kricha_doctrine_audit.yaml (symfony >= 3.4) kricha_doctrine_audit: entities: App\Entity\Order: ~ App\Entity\User: ~
所有 Order 和 User 属性都将被审计。尽管可以排除一些属性不进行审计。
// app/config/config.yml (symfony < 3.4) // config/packages/kricha_doctrine_audit.yaml (symfony >= 3.4) kricha_doctrine_audit: entities: App\Entity\Order: ~ # all MyAuditedEntity1 properties are audited App\Entity\User: ignored_columns: # properties ignored by the audit process - createdAt - updatedAt
还可以指定审计过程中全局忽略的属性。
// app/config/config.yml (symfony < 3.4) // config/packages/kricha_doctrine_audit.yaml (symfony >= 3.4) kricha_doctrine_audit: ignored_columns: # properties ignored by the audit process in any audited entity - createdAt - updatedAt
审计表命名格式
审计表名称由前缀、被审计的表名称和后缀组成。默认情况下,前缀为空,后缀为 _audit。尽管可以自定义。
// app/config/config.yml (symfony < 3.4) // config/packages/kricha_doctrine_audit.yaml (symfony >= 3.4) kricha_doctrine_audit: table_prefix: '' table_suffix: '_audit'
创建审计表
打开命令行,进入您的项目目录,然后执行以下命令以审查更新模式队列中的新审计表。
# symfony < 3.4
app/console doctrine:schema:update --dump-sql
# symfony >= 3.4
bin/console doctrine:schema:update --dump-sql
注意:DoctrineAuditBundle 目前仅与名为 "default" 的 DBAL 连接和 EntityManager 一起使用。
使用 Doctrine Migrations Bundle
# symfony < 3.4
app/console doctrine:migrations:diff
app/console doctrine:migrations:migrate
# symfony >= 3.4
bin/console doctrine:migrations:diff
bin/console doctrine:migrations:migrate
使用 Doctrine 模式
# symfony < 3.4
app/console doctrine:schema:update --force
# symfony >= 3.4
bin/console doctrine:schema:update --force
审计查看器
将以下路由添加到路由配置中,以启用包含的审计查看器。
// app/config/routing.yml (symfony < 3.4) // config/routes.yaml (symfony >= 3.4) kricha_doctrine_audit: resource: "@KrichaDoctrineAuditBundle/Controller/" type: annotation
可以在获取结果之前通过调用 AuditReader::filterBy 方法来通过事件类型过滤结果。
可用的常量包括
AuditManager::INSERT AuditManager::UPDATE AuditManager::DELETE AuditManager::ASSOCIATE AuditManager::DISSOCIATE
自定义用户提供者
如果您不使用 Symfony 的 TokenStorage 来保存您的当前用户,则可以配置更改的自定义用户名。
use App\Entity\Order; use Doctrine\ORM\EntityManagerInterface; use Kricha\DoctrineAuditBundle\AuditConfiguration; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; class TestController extends AbstractController { /** * @Route("/") */ public function index(EntityManagerInterface $entityManager, AuditConfiguration $auditConfiguration) { $auditConfiguration->setUsernameCallable( static function () { return '[ControllerChanger]'; } ); $order = $this->entityManager->find(Order::class, 1); $order->setComment(\uniqid()); $entityManager->persist($order); $entityManager->flush(); return $this->render('index.html.twig', ['hello' => 'wolrd']); } }
用法
当您运行模式更新或类似操作时,审计实体将自动映射。之后,所有数据库更改都将反映在审计日志中。
常见问题解答 (FAQ)
我在配置文件中添加了一个新的实体,但它没有被审计。
首先检查其命名空间,然后清除您的缓存,并重新运行
doctrine:schema:update或doctrine:migrations:migrate。
贡献
DoctrineAuditBundle 是一个开源项目。我们欢迎社区的贡献。请向我们发送您的想法、代码审查、pull requests 和功能请求,以帮助我们改进此项目。
在为此项目贡献时,请不要忘记提供单元测试。
许可证
DoctrineAuditBundle 可免费使用,并受 MIT 许可证 的许可。