herdwatch / entity-audit-bundle
Doctrine 实体审计
资助包维护!
OskarStark
core23
VincentLanglet
wbloszyk
Requires
- php: ^7.4 || ^8.0
- doctrine/collections: ^1.6
- doctrine/common: ^3.1
- doctrine/dbal: ^2.13 || ^3.0
- doctrine/event-manager: ^1.1
- doctrine/orm: ^2.10
- doctrine/persistence: ^2.2 || ^3.0
- symfony/config: ^4.4 || ^5.4 || ^6.0
- symfony/dependency-injection: ^4.4 || ^5.4 || ^6.0
- symfony/http-kernel: ^4.4 || ^5.4 || ^6.0
- symfony/security-core: ^4.4 || ^5.4 || ^6.0
- twig/twig: ^2.6 || ^3.0
Requires (Dev)
- doctrine/doctrine-bundle: ^2.4.4
- doctrine/doctrine-fixtures-bundle: ^3.4
- friendsofphp/php-cs-fixer: ^3.4
- gedmo/doctrine-extensions: ^3.0
- matthiasnoback/symfony-dependency-injection-test: ^4.2.1
- 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.17
- psalm/plugin-symfony: ^3.0
- rector/rector: ^0.14
- symfony/browser-kit: ^4.4 || ^5.4 || ^6.0
- symfony/cache: ^4.4 || ^5.4 || ^6.0
- symfony/filesystem: ^4.4 || ^5.4 || ^6.0
- symfony/framework-bundle: ^4.4 || ^5.4 || ^6.0
- symfony/http-foundation: ^4.4 || ^5.4 || ^6.0
- symfony/phpunit-bridge: ^6.1
- symfony/security-bundle: ^4.4 || ^5.4 || ^6.0
- symfony/twig-bundle: ^4.4 || ^5.4 || ^6.0
- symfony/var-dumper: ^4.4 || ^5.4 || ^6.0
- vimeo/psalm: ^4.8
- weirdan/doctrine-psalm-plugin: ^2.0
Conflicts
- doctrine/annotations: <1.7
- doctrine/doctrine-bundle: <2.4.4
- gedmo/doctrine-extensions: <3.0
- symfony/framework-bundle: <4.4
- dev-master
- 1.x-dev
- v1.9.2
- 1.9.1
- 1.2.3
- 1.2.2
- 1.2.1
- 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
- dev-release-1.9
- dev-gras-579-many-to-many-fix
- dev-gras-545-many-to-many-issue
- dev-flintci-55614
- dev-legacy_master
This package is auto-updated.
Last update: 2024-09-04 11:03:59 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
创建新表
调用以下命令以查看更新架构队列中的新表。
./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()
创建的实例 不会 注入到 EntityManagers UnitOfWork 中,如果应该将其重新附加到旧版本的持久性上下文,则必须将其合并到 EntityManager 中。
查找审计实体的修订历史记录
$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 Web环境中,用户名从当前安全上下文令牌中解析。
您可以通过配置包中的 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
- 允许您比较两个修订之间实体的更改
待办事项
- 目前仅适用于自增数据库
- 需要正确的元数据映射,允许禁用字段和关联的版本控制。
- 它不适用于联合表继承(单表继承应该可以工作,但未测试)
- 多对多关联不进行版本控制