roothirsch / entity-audit-bundle

Doctrine 实体审计

安装: 2

依赖: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 261

类型:symfony-bundle


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,并且应该返回一个stringnull

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 .