roothirsch / entity-audit-bundle
Doctrine 实体审计
Requires
- php: ^5.3.9|~7.0
- doctrine/dbal: ~2.5
- doctrine/orm: ~2.4
Requires (Dev)
- doctrine/doctrine-bundle: ~1.4
- fabpot/php-cs-fixer: ^1.11
- gedmo/doctrine-extensions: ^2.3.1
- matthiasnoback/symfony-dependency-injection-test: ^1.0
- phpunit/phpunit: ^4.8
- symfony/framework-bundle: ~2.7|~3.0
- symfony/var-dumper: ^2.7
Conflicts
- doctrine/dbal: 2.7.0
- doctrine/doctrine-bundle: <1.4
- gedmo/doctrine-extensions: <2.3.1
- symfony/framework-bundle: <2.7
- dev-master / 2.0.x-dev
- 1.0.x-dev
- 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-fix-many-to-one-relation
- dev-next
- dev-oracle-support
- dev-libary-bundle-split
- dev-fixes/support-auditing-of-entities-identified-through-foreign-entities
This package is not auto-updated.
Last update: 2024-09-22 14:45:48 UTC
README
警告:主分支还不稳定,可能无法正常工作!请使用版本 ^1.0
以及此文档:[https://github.com/simplethings/EntityAudit/blob/1.0/README.md](https://github.com/simplethings/EntityAudit/blob/1.0/README.md)
此 Doctrine 2 扩展受到 [Hibernate Envers](https://jboss.com.cn/envers) 的启发,允许对实体及其关联进行完整版本控制。
这个库还在维护中吗?
[可能?](https://github.com/simplethings/EntityAudit/issues/203) - 请在相关问题上讨论并支持我们
它是如何工作的?
数据库表审计或版本控制有多种不同的方法。此扩展为每个审计的实体表创建一个后缀为 "_audit" 的镜像表。除了被审计实体的所有列外,还有两个额外的字段
- rev - 包含从 "revisions" 表生成的全局修订号。
- revtype - 包含 'INS'、'UPD' 或 'DEL' 中的一个,作为此修订日志条目由哪种数据库操作引起的指示。
全局修订表包含 id、时间戳、用户名和更改注释字段。
通过这种方法,可以在特定时间点版本化应用程序及其对关联的更改。
此扩展挂钩到 SchemaTool 生成过程,以便自动为您要审计的实体创建必要的 DDL 语句。
安装(独立使用)
安装 lib/bundle
简单地运行,假设您已安装 composer.phar 或 composer 二进制文件
$ composer require simplethings/entity-audit-bundle
对于独立使用,您必须传递 EntityManager。
use Doctrine\ORM\EntityManager; use SimpleThings\EntityAudit\AuditManager; $config = new \Doctrine\ORM\Configuration(); // $config ... $conn = array(); $em = EntityManager::create($conn, $config, $evm); $auditManager = AuditManager::create($em);
安装(在 Symfony2 应用程序中)
启用包
在内核中启用包
// app/AppKernel.php public function registerBundles() { $bundles = array( //... new SimpleThings\EntityAudit\SimpleThingsEntityAuditBundle(), //... ); return $bundles; }
配置
您可以配置要审计的表。
app/config/config.yml
simple_things_entity_audit: entity_manager: default table_prefix: '' table_suffix: _audit revision_field_name: rev revision_type_field_name: revtype revision_table_name: revisions revision_id_field_type: integer
创建新表
调用以下命令以查看更新模式队列中的新表。
./app/console doctrine:schema:update --dump-sql
使用方法
定义可审计实体
您需要为要可审计的实体添加 Auditable
注解。
use Doctrine\ORM\Mapping as ORM; use SimpleThings\EntityAudit\Mapping\Annotation as Audit; /** * @ORM\Entity() * @Audit\Auditable() */ class Page { //... }
您还可以忽略特定实体中的字段。
class Page { /** * @ORM\Column(type="string") * @Audit\Ignore() */ private $ignoreMe; }
使用 AuditReader
查询审计信息是通过 SimpleThings\EntityAudit\AuditReader
实例完成的。
在独立应用程序中,您可以从审计管理器创建审计读取器
$auditReader = $auditManager->createAuditReader();
在 Symfony2 中,AuditReader 作为服务 "simplethings_entityaudit.reader" 注册
class DefaultController extends Controller { public function indexAction() { $auditReader = $this->container->get('simplethings_entityaudit.manager')->createAuditReader(); } }
在特定修订版中查找实体状态
此命令还会返回给定修订版中实体状态的更改,即使对实体的最后更改是在给定修订版之前进行的
$articleAudit = $auditReader->find( 'SimpleThings\EntityAudit\Tests\ArticleAudit', $id = 1, $rev = 10 );
通过 AuditReader#find()
创建的实例 不会 注入到 EntityManagers UnitOfWork 中,如果需要将其重新附加到旧版本的持久性上下文,则需要将其合并到 EntityManager 中。
查找可审计实体的修订历史
$revisions = $auditReader->findRevisions( 'SimpleThings\EntityAudit\Tests\ArticleAudit', $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 );
设置当前用户名
每个修订版都会自动保存更改它的用户名。为此,必须解决用户名。
在Symfony2 Web环境中,用户名是从当前安全上下文令牌中解析出来的。
您可以通过配置包配置中的username_callable
服务来自定义此行为。您的自定义服务必须是一个callable
,并且应该返回一个string
或null
。
app/config/config.yml
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; });
查看审计
提供了一个默认的Symfony2控制器,它提供了查看审计数据的基本功能。
要使用此控制器,请导入路由(不要忘记保护您设置的子域,以确保只有适当的用户可以访问)
app/config/routing.yml
simple_things_entity_audit: resource: "@SimpleThingsEntityAuditBundle/Resources/config/routing.yml" 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
- 允许您比较两个修订版本之间实体的更改
待办事项
- 目前仅适用于自增数据库
支持的数据库
- MySQL / MariaDB
- PostgreSQL
- SQLite
我们只能通过Travis测试来支持数据库
贡献
在提交之前,请运行此命令 ./vendor/bin/php-cs-fixer fix --verbose
以标准化代码风格。
如果您已经在本地安装了修复器,您可以运行 php-cs-fixer fix .
。