sonata-project / entity-audit-bundle
Doctrine 实体审计
Requires
- php: ^8.0
- doctrine/collections: ^1.8 || ^2.0
- doctrine/dbal: ^3.6
- doctrine/event-manager: ^1.2 || ^2.0
- doctrine/orm: ^2.14 || ^3.0
- doctrine/persistence: ^3.0
- psr/clock: ^1.0
- symfony/config: ^5.4 || ^6.2 || ^7.0
- symfony/dependency-injection: ^5.4 || ^6.2 || ^7.0
- symfony/http-kernel: ^5.4 || ^6.2 || ^7.0
- symfony/security-core: ^5.4 || ^6.2 || ^7.0
- twig/twig: ^3.0
Requires (Dev)
- doctrine/doctrine-bundle: ^2.7
- doctrine/doctrine-fixtures-bundle: ^3.4
- friendsofphp/php-cs-fixer: ^3.4
- gedmo/doctrine-extensions: ^3.15
- matthiasnoback/symfony-dependency-injection-test: ^4.2.1 || ^5.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.0
- phpstan/phpstan-doctrine: ^1.3.12
- phpstan/phpstan-phpunit: ^1.0
- phpstan/phpstan-strict-rules: ^1.0
- phpstan/phpstan-symfony: ^1.0
- phpunit/phpunit: ^9.5.13
- psalm/plugin-phpunit: ^0.18
- psalm/plugin-symfony: ^5.0
- rector/rector: ^1.1
- symfony/browser-kit: ^5.4 || ^6.2 || ^7.0
- symfony/cache: ^5.4 || ^6.2 || ^7.0
- symfony/filesystem: ^5.4 || ^6.2 || ^7.0
- symfony/framework-bundle: ^5.4 || ^6.2 || ^7.0
- symfony/http-foundation: ^5.4 || ^6.2 || ^7.0
- symfony/phpunit-bridge: ^6.2
- symfony/security-bundle: ^5.4 || ^6.2 || ^7.0
- symfony/twig-bundle: ^5.4 || ^6.2 || ^7.0
- symfony/var-dumper: ^5.4 || ^6.2 || ^7.0
- vimeo/psalm: ^5.7
Conflicts
- doctrine/doctrine-bundle: <2.7
- gedmo/doctrine-extensions: <3.7
- symfony/framework-bundle: <5.4
- symfony/string: 5.4.0-BETA1 || 5.4.0-RC1
- 2.x-dev
- 1.x-dev
- 1.18.0
- 1.17.1
- 1.17.0
- 1.16.1
- 1.16.0
- 1.15.0
- 1.14.1
- 1.14.0
- 1.13.0
- 1.12.0
- 1.11.0
- 1.10.1
- 1.10.0
- 1.9.1
- 1.9.0
- 1.8.0
- 1.7.0
- 1.6.1
- 1.6.0
- 1.5.0
- 1.4.0
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.1
- 1.1.0
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.9.2
- 0.9.1
- 0.9.0
- v0.8
- v0.7
- v0.6
- v0.5.1
- v0.5
- v0.3
- v0.2
- v0.1.0
This package is auto-updated.
Last update: 2024-09-15 02:48:21 UTC
README
此 Doctrine 2 扩展受到 Hibernate Envers 的启发,并允许实体及其关联的完整版本控制。
支持
有关一般支持和问题,请使用 StackOverflow。
如果您认为您发现了一个错误或您有一个要提出的功能想法,请在查看贡献指南后打开问题。
许可
此软件包可在LGPL 许可证下使用。
它是如何工作的?
数据库表的审计或版本控制有许多不同的方法。此扩展为每个审计实体的表创建一个镜像表,并以 "_audit" 后缀结尾。除了审计实体的所有列之外,还有两个额外的字段
- rev - 包含从 "revisions" 表生成的全局修订号。
- revtype - 包含 'INS'、'UPD' 或 'DEL' 之一,作为关于导致此修订日志条目数据库操作类型的说明。
全局修订表包含 id、时间戳、用户名和更改注释字段。
使用这种方法,可以在特定的时间点对应用程序及其对关联的更改进行版本控制。
此扩展挂钩到 SchemaTool 生成过程,以便自动为您的审计实体创建必要的 DDL 语句。
安装
安装包
假设您有 composer,只需运行以下命令
$ composer require sonata-project/entity-audit-bundle
启用包
最后,在内核中启用该包
// config/bundles.php return [ //... SimpleThings\EntityAudit\SimpleThingsEntityAuditBundle::class => ['all' => true], //... ];
配置
加载扩展 "simple_things_entity_audit" 并指定审计实体
# config/packages/entity_audit.yaml simple_things_entity_audit: audited_entities: - MyBundle\Entity\MyEntity - MyBundle\Entity\MyEntity2
如果您需要排除某些实体属性以触发修订,请使用
# config/packages/entity_audit.yaml simple_things_entity_audit: global_ignore_columns: - created_at - updated_at
要与其他连接或实体管理器(而非 "default")一起使用,请使用以下设置
# config/packages/entity_audit.yaml simple_things_entity_audit: connection: custom entity_manager: custom
如果您需要显式丢弃从审计实体推断的外键,可以使用 disable_foreign_keys
参数
simple_things_entity_audit: disable_foreign_keys: true
创建新表
调用以下命令以查看更新模式队列中的新表。
./bin/console doctrine:schema:update --dump-sql
独立安装
对于独立使用,您必须将待审计的实体类名传递给 MetadataFactory 实例,并配置两个事件监听器。
use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\Common\EventManager; use SimpleThings\EntityAudit\AuditConfiguration; use SimpleThings\EntityAudit\AuditManager; use SimpleThings\EntityAudit\Tests\ArticleAudit; use SimpleThings\EntityAudit\Tests\UserAudit; $auditConfig = new AuditConfiguration(); $auditConfig->setAuditedEntityClasses([ArticleAudit::class, UserAudit::class]); $auditConfig->setGlobalIgnoreColumns(['created_at', 'updated_at']); $eventManager = new EventManager(); $auditManager = new AuditManager($auditConfig); $auditManager->registerEvents($eventManager); $config = new Configuration(); // $config ... $connection = []; $entityManager = EntityManager::create($connection, $config, $eventManager);
使用方法
使用 SimpleThings\EntityAudit\AuditReader
实例进行审计信息查询。
use SimpleThings\EntityAudit\AuditReader; class DefaultController extends Controller { public function indexAction(AuditReader $auditReader) { } }
在独立应用程序中,您可以从审计管理器创建审计读取器
$auditReader = $auditManager->createAuditReader($entityManager);
查找特定修订的实体状态
此命令还会返回给定修订的实体状态,即使对该实体的最后更改是在给定修订之前进行的
$articleAudit = $auditReader->find( SimpleThings\EntityAudit\Tests\ArticleAudit::class, $id = 1, $rev = 10 );
通过 AuditReader#find()
创建的实例不注入到实体管理器的 UnitOfWork 中,如果需要在旧版本中将它们重新附加到持久性上下文中,则需要将它们合并到实体管理器中。
查找审计实体的修订历史记录
$revisions = $auditReader->findRevisions( SimpleThings\EntityAudit\Tests\ArticleAudit::class, $id = 1 );
修订具有以下 API
class Revision { public function getRev(); public function getTimestamp(); public function getUsername(); }
在特定版本中查找已更改的实体
$changedEntities = $auditReader->findEntitiesChangedAtRevision(10);
已更改的实体具有API
class ChangedEntity { public function getClassName(); public function getId(); public function getRevisionType(); public function getEntity(); }
查找已审计实体的当前版本
$revision = $auditReader->getCurrentRevision( 'SimpleThings\EntityAudit\Tests\ArticleAudit', $id = 3 );
设置当前用户名
每个版本都会自动保存更改它的用户名。为了使其正常工作,必须解析用户名。
在Symfony网络上下文中,用户名从当前安全上下文令牌中解析。
您可以通过配置包中的username_callable
服务来自定义此行为。您的自定义服务必须是一个callable
,并应返回一个string
或null
。
# config/packages/entity_audit.yaml simple_things_entity_audit: service: username_callable: acme.username_callable
在独立应用程序或Symfony命令中,您可以使用AuditConfiguration
将用户名可调用设置为特定值。
$auditConfig = new \SimpleThings\EntityAudit\AuditConfiguration(); $auditConfig->setUsernameCallable(function () { $username = //your customer logic return username; });
查看审计
提供了一个默认的Symfony控制器,它提供了基本查看已审计数据的功能。
要使用控制器,导入路由(不要忘记保护您设置的别名,以确保只有适当的用户可以访问)
# config/routes.yaml simple_things_entity_audit: resource: "@SimpleThingsEntityAuditBundle/Resources/config/routing/audit.xml" prefix: /audit
这为您提供了一些不同的路由
simple_things_entity_audit_home
- 显示版本列表、它们的日期和时间以及执行版本的用户simple_things_entity_audit_viewrevision
- 显示在特定版本中修改了哪些类simple_things_entity_audit_viewentity
- 显示指定实体被修改的版本simple_things_entity_audit_viewentity_detail
- 显示在指定版本中指定实体的数据simple_things_entity_audit_compare
- 允许您比较两个版本之间实体的更改
待办事项
- 当前仅适用于自增数据库
- 需要适当的元数据映射,允许禁用字段和关联的版本控制。
- 它不支持联表继承(单表继承应该可以工作,但未测试)