dbrisinajumi/audittrail

流行的审计跟踪扩展的重载

2.1.7 2015-12-21 17:24 UTC

This package is auto-updated.

Last update: 2024-09-07 21:11:02 UTC


README

这基本上是对MadSkillsTisdale在https://yiiframework.cn/extension/audittrail上制作的先前扩展的修改。

我基本上清理了一些代码,并在本扩展捆绑的行为中添加了一些功能。

安装扩展

因此,出于这些原因,该模块已被删除。

Composer

此扩展列在packagist上。

php copmoser.phar require dbrisinajumi/audittrail

需要https://github.com/uldisn/ace。在Packagist中列出或在composer中添加

"repositories":[
        {
    	        "type": "vcs",
            	"url": "https://github.com/yiiext/fancybox-widget"
    	}
    ]

步骤 1

要安装,您必须首先选择一个文件夹来放置此存储库。我选择了

/root/backend/extensions/modules
or
/vendor/dbrisinajumi

因为这对我来说似乎是正确的。将此存储库克隆到该位置。

步骤 2

安装表格的时间。您可以使用此扩展原始作者提供的迁移文件,或者您可以使用迁移文件夹中捆绑的SQL文件。只需在您的数据库服务器上运行它(使用PHPMyAdmin或类似工具),并观察魔法展开。

步骤 3

创建别名 'aliases' => array( 'audittrail' => 'vendor.dbrisinajumi.audittrail', )

在您的配置中引用AuditTrail模型

'import'=>array(
	'audittrail.AuditTrail',
	'audittrail.models.*', 
    	'audittrail.behaviors.*', 
),

注意 您可以将AuditTrail移动到您的models文件夹,以避免需要像这样链接它。

步骤 4 - 定义模块

        'audittrail' => array(//++
            'class' => 'vendor.dbrisinajumi.audittrail.AudittrailModule', 
            'ref_models' => array(
                'DtrsTruckStatus' => array(
                    'DtrcTruckContainers' => 'dtrc_dtrs_id',
                    'D2files' => array(
                        'compare' => array(
                            'model' => 'depo2.DtrsTruckStatus',
                            'model_id' => 'pk_value',
                            ),

                    ),                    
                    'yii_t_category' => 'Depo2Module.model',
                    'yii_t_message' => 'Truck',                    
                ),
                'DtrcTruckContainers' => array(
                    'yii_t_category' => 'Depo2Module.model',
                    'yii_t_message' => 'Containers',                    
                ),
                'D2files' => array(
                    'hidded_fields' => ['add_datetime','user_id','model','model_id','upload_path'],
                    'yii_t_category' => 'D2filesModule.crud_static',
                    'yii_t_message' => 'Attachments'
                ),

            'ref_field_sql' => array(
                'car_id' => 'SELECT car_reg_number v FROM cars WHERE car_id = #id#',
                'price_id' => "SELECT price from prices where id = #id#",
            ),
        ),        
  • 通过ref_models添加以推入弹出相关表更改:** 'rel_table' => 'ref_field' - 为表rel_table的记录main_table.id = rel_table.ref_field添加到弹出更改中** yii_t_category和yii_t_message用于显示表头:Yii::t('yii_t_category','yii_t_message')

  • 通过ref_field_sql可以定义在对话框中推入时显示名称而不是引用键。选择必须包含列v - 外键的标签。

步骤 5

只需在模型中使用行为即可

'LoggableBehavior'=> array(
	'class' => 'audittrail.behaviors.LoggableBehavior',
)

步骤 6

对于迁移,在配置文件控制台添加 'aliases' => array( 'audittrail' => 'vendor.dbrisinajumi.audittrail', ) 如果在params中定义了表名,则添加主配置中'params' => CMap::mergeArray( $mainConfig['params'], array(..))的所有参数

尾声

如果您的用户类不是User,那么您可能(取决于您的配置)需要更改AuditLog模型中的关系,以符合您的需求。

API

请注意,以下代码片段仅为代码片段,且未在实际环境中进行测试。建议您将此部分用作参考和文档,不要从此处复制粘贴。

自定义用户属性

有些人实际上没有定义用户,但有一个可审计模型的属性可以定义谁编辑了它的唯一标识。为此,您可以使用

'LoggableBehavior'=> array(
	'class' => 'vendor.dbrisinajumi.audittrail.behaviors.LoggableBehavior',
	'userAttribute' => 'name'
)

存储时间戳

可以使用以下方法将审计日志的日期更改为使用时间戳:

'LoggableBehavior'=> array(
	'class' => 'vendor.dbrisinajumi.audittrail.behaviors.LoggableBehavior',
	'storeTimestamp' => true
)

更改日期格式

您可以使用行为的dateFormat属性调整日期格式

'LoggableBehavior'=> array(
	'class' => 'vendor.dbrisinajumi.audittrail.behaviors.LoggableBehavior',
	'dateFormat' => 'Y-m-d H:i:s'
)

忽略和允许特定字段

本版本增加了一个有趣的功能。现在您可以指定一个allowed字段集和一个ignored字段集...或者两者都指定。

要这样做,就像平常一样将这种行为包含到您的模型中

'LoggableBehavior'=> 'site.backend.extensions.modules.auditTrail.behaviors.LoggableBehavior'

然后添加一个ignoredallowed(或两者都添加)字段列表到行为中,如下所示

'LoggableBehavior'=> array(
	'class' => 'vendor.dbrisinajumi.audittrail.behaviors.LoggableBehavior',
	'allowed' => array(
		'version',
		'ns_purchase_description'
	),
	'ignored' => array(
		'ns_purchase_description',
		'ns_display_name',
		'update_time'
	)
)

行为中allowedignored参数中放入的名称代表字段名。

您会注意到,我允许了ns_purchase_description字段,同时也忽略了它。当您以这种方式使用字段时,ignored将替换allowed,并且该字段将被省略。

忽略整个类

如果将这种行为放在一个扩展CActiveRecord的类中,而这个类是您所有模型都扩展的,这将非常有用。在您希望所有类都共享相同的核心(如这个行为)而不必在创建的每个模型中指定它的情况下非常有用。

'LoggableBehavior'=> array(
	'class' => 'vendor.dbrisinajumi.audittrail.behaviors.LoggableBehavior',
  	'ignored_class' => array(
		'ErrorLog',  // I use this to log error messages to MYSQL, no need to keep a log of this
	),
)

小部件审计日志网格

$this->widget('vendor.dbrisinajumi.audittrail.components.AudittrailHistory',
        array('model'=>$model,'id' => 'audittrail_data_grid')
        );

弹出窗口的链接

               if(Yii::app()->user->checkAccess("audittrail") 
                    && isset(Yii::app()->getModule('depo2')->options['audittrail']) 
                    && Yii::app()->getModule('depo2')->options['audittrail'])
                {        
                    Yii::import('audittrail.*');
                    $this->widget("vendor.dbrisinajumi.audittrail.widgets.AudittrailViewTbButton",array(
                        'model_name' => get_class($model),
                        'model_id' => $model->getPrimaryKey(),
                    ));                    
                }         

打印审计日志

由于这不再使用模块来完成其工作,因此不再为之前内置的审计日志提供全局配置。相反,您可以插入一个审计日志(仅作为示例,显示对书名及其产品在书名页面上的更改的审计),如下所示

$model_ids = array(array($model->id, 'Title'));
foreach($model->products as $id => $product){
    $model_ids[] = array($product->id, 'Product');
}

$criteria=new CDbCriteria(array(
    'order'=>'stamp DESC',
    'with'=>array('user'),
));
$param_id = 0;
foreach( $model_ids as $id_pair ) {
    $criteria->addCondition( '( model_id = :id' . $param_id . ' AND model = :model' . $param_id . ' )', 'OR' );
    $criteria->params[ ':id' . $param_id ] = $id_pair[0];
    $criteria->params[ ':model' . $param_id ] = $id_pair[1];
    $param_id++;
}

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'title-grid',
    'dataProvider'=>new CActiveDataProvider('AuditTrail', array(
        'criteria'=>$criteria,
        'pagination'=>array(
            'pageSize'=>100,
        )
    )),
    'columns'=>array(
        array(
            'name' => 'Author',
            'value' => '$data->user ? $data->user->email : ""'
        ),
        'model',
        'model_id',
        'action',
        array(
            'name' => 'field',
            'value' => '$data->getParent()->getAttributeLabel($data->field)'
        ),
        'old_value',
        'new_value',
        array(
            'name' => 'Date Changed',
            'value' => 'date("d-m-Y H:i:s", strtotime($data->stamp))'
        )
    ),
));