nti/audit-bundle

symfony3 和 doctrine orm 的审计包,记录任何数据库变更

安装数: 2,561

依赖者: 0

建议者: 0

安全: 0

星星: 1

关注者: 2

分支: 63

类型:symfony-bundle

v2.5.1 2024-08-02 14:28 UTC

README

此包为所有 doctrine ORM 数据库相关变更创建审计日志

  • 包括插入和更改、关联和解除关联操作。
  • 如果有用户和更新,包括它们的差异和关系字段差异。
  • 多对多关系令牌存储,将链接到日志。
  • 审计条目在 flush 期间以同一事务插入,如果失败,状态保持干净。

基本上,您可以通过这些日志条目跟踪任何通过标准 ORM 操作管理的变更。

注意:审计无法跟踪 DQL 或直接 SQL 更新或删除语句的执行。

预安装

要继续在审计日志包中使用 Query Loggers 方法,Symfony 6.x 及以下版本需要安装 firehed/dbal-logger v1.0.1。在继续下一步之前,请确保已安装此软件包。

安装

首先,使用 composer 安装它

composer require nti/audit-bundle

然后,在您的 AppKernel 包中添加它。

// app/AppKernel.php
public function registerBundles()
{
    $bundles = array(
        ...
        new DataDog\AuditBundle\DataDogAuditBundle(),
        ...
    );
    ...
}

使用查询

//SQL
CREATE TABLE audit_logs (id INT AUTO_INCREMENT NOT NULL, source_id INT NOT NULL, target_id INT DEFAULT NULL, blame_id INT DEFAULT NULL, action VARCHAR(12) NOT NULL, tbl VARCHAR(128) NOT NULL, diff LONGTEXT DEFAULT NULL COMMENT'(DC2Type:json_array)', logged_at DATETIME NOT NULL, UNIQUE INDEX UNIQ_D62F2858953C1C61 (source_id), UNIQUE INDEX UNIQ_D62F2858158E0B66 (target_id), UNIQUE INDEX UNIQ_D62F28588C082A2E (blame_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET UTF8 COLLATE UTF8_unicode_ci ENGINE = InnoDB;
CREATE TABLE audit_associations (id INT AUTO_INCREMENT NOT NULL, typ VARCHAR(128) NOT NULL, tbl VARCHAR(128) DEFAULT NULL, label VARCHAR(255) DEFAULT NULL, fk VARCHAR(255) NOT NULL, class VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET UTF8 COLLATE UTF8_unicode_ci ENGINE = InnoDB;
CREATE TABLE audit_request (id INT AUTO_INCREMENT NOT NULL, method VARCHAR(255) DEFAULT NULL, controller VARCHAR(255) DEFAULT NULL, route VARCHAR(255) DEFAULT NULL, route_params LONGTEXT DEFAULT NULL, ip VARCHAR(255) DEFAULT NULL, user_name VARCHAR(255) DEFAULT NULL,portal VARCHAR(255) DEFAULT NULL, query_data LONGTEXT DEFAULT NULL, data LONGTEXT DEFAULT NULL, created_on DATETIME DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET UTF8 COLLATE UTF8_unicode_ci ENGINE = InnoDB;     ALTER TABLE audit_logs ADD CONSTRAINT FK_D62F2858953C1C61 FOREIGN KEY (source_id) REFERENCES audit_associations (id);
ALTER TABLE audit_logs ADD CONSTRAINT FK_D62F2858158E0B66 FOREIGN KEY (target_id) REFERENCES audit_associations (id);
ALTER TABLE audit_logs ADD CONSTRAINT FK_D62F28588C082A2E FOREIGN KEY (blame_id) REFERENCES audit_associations(id);
ALTER TABLE audit_associations ADD created_on DATETIME NOT NULL;

使用 Doctrine 模式

// Doctrine
php bin/console doctrine:schema:update -f

配置

在项目中启用审计请求

// app/config.yml
# DataDog
data_dog_audit:
    audit_request:
        enabled: true

如果您将使用自定义数据库连接,请使用以下配置

// app/config.yml
# DataDog
data_dog_audit:
    database:
        connection_name: nti_logs    
    audit_request:
        enabled: true

查看 如何使用多个实体管理和连接

注解

注解必须在控制器中使用,在类中添加 Annotations NTIAudit

//src/Bundle/Controller/Controller.php
use DataDog\AuditBundle\Annotations\NTIAudit;

/**
* Class Controller
* @package AppBundle\Controller
* @NTIAudit()
* @Route("/controller")
*/
class Controller extends Controller {
    //TODO CODE HERE
}

未审计实体

有时,您可能不想为特定实体创建审计日志条目。您可以通过在 config.yml 中的 unaudited_entities 配置键下列出这些实体来实现,例如

data_dog_audit:
    unaudited_entities:
        - AppBundle\Entity\NoAuditForThis

指定审计实体

有时,也可能只希望为特定实体创建审计日志条目。您可以通过与未审计实体类似的方式来实现。您可以在 config.yml 中的 audited_entities 配置键下列出它们,例如

data_dog_audit:
    audited_entities:
        - AppBundle\Entity\AuditForThis

您可以指定已审计或未审计实体。如果两者都指定,则只考虑已审计实体。

命令

用于删除审计数据

php bin/console nti:audit:delete {qtyDays}

许可

NTI