dbrisinajumi / audittrail
流行的审计跟踪扩展的重载
Requires
- php: >=5.1.0
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'
然后添加一个ignored
或allowed
(或两者都添加)字段列表到行为中,如下所示
'LoggableBehavior'=> array(
'class' => 'vendor.dbrisinajumi.audittrail.behaviors.LoggableBehavior',
'allowed' => array(
'version',
'ns_purchase_description'
),
'ignored' => array(
'ns_purchase_description',
'ns_display_name',
'update_time'
)
)
行为中allowed
和ignored
参数中放入的名称代表字段名。
您会注意到,我允许了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))'
)
),
));