萨迈耶 / auditrail2
热门审计跟踪扩展的重载
README
这基本上是对MadSkillsTisdale在https://yiiframework.cn/extension/audittrail处制作的先前扩展进行修改。
我基本上清理了一些代码,并在本扩展包中添加了一些功能。
安装扩展
安装方法已更改。由于
- 它只为审计日志小部件提供了全局配置变量
- 它是额外的膨胀,并不能满足需求
- 我发现在一个真实系统中,你可能不希望有一个显示所有审计日志条目的页面,因为审计日志
- 使用
CGridView
向页面添加审计日志非常简单
因此,出于这些原因,模块已被删除。
Composer
此扩展已在packagist上列出。
步骤 1
要安装,您必须首先选择一个文件夹来放置此存储库。我选择了
/root/backend/extensions/modules
因为这对我来说似乎是正确的。将此存储库克隆到该位置。
步骤 2
现在是安装表的时候了。您可以使用此扩展的原始作者提供的迁移文件,或者您可以使用迁移文件夹中捆绑的SQL文件。只需在您的数据库服务器上运行它(使用PHPMyAdmin或其他工具)即可观看魔法展开。
步骤 3
在您的配置中引用AuditTrail
模型
'import'=>array(
'site.backend.extensions.modules.auditTrail.models.AuditTrail',
),
注意 您可以将AuditTrail
移动到您的models
文件夹中,这样您就不需要像这样链接它。
步骤 4
只需在一个模型中使用行为,如
'LoggableBehavior'=> array(
'class' => 'site.backend.extensions.modules.auditTrail.behaviors.LoggableBehavior',
)
尾声
如果您的用户类不是User
,则(根据您的设置)您可能需要更改AuditLog
模型中的关系以符合您的需求。
API
请注意,以下代码片段仅为代码片段,并未在实际环境中进行测试。建议您将此部分用作参考和文档,不要从此处复制粘贴。
自定义用户属性
有些人没有定义用户,但有一个可审计模型的属性可以定义谁编辑了它的唯一标识符。为此,您可以使用
'LoggableBehavior'=> array(
'class' => 'site.backend.extensions.modules.auditTrail.behaviors.LoggableBehavior',
'userAttribute' => 'name'
)
存储时间戳
可以使用以下方法将审计日志的日期更改为使用时间戳
'LoggableBehavior'=> array(
'class' => 'site.backend.extensions.modules.auditTrail.behaviors.LoggableBehavior',
'storeTimestamp' => true
)
更改日期格式
您可以使用行为的dateFormat
属性调整日期格式
'LoggableBehavior'=> array(
'class' => 'site.backend.extensions.modules.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' => 'site.backend.extensions.modules.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' => 'site.backend.extensions.modules.auditTrail.behaviors.LoggableBehavior',
'ignored_class' => array(
'ErrorLog', // I use this to log error messages to MYSQL, no need to keep a log of this
),
)
打印审计日志
由于这不再使用模块来完成其工作,因此没有全局配置来使之前内置的审计日志工作。相反,您可以插入一个审计日志(例如,仅作为示例,显示对书籍标题及其产品在书籍标题页面上的更改的审计)
$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))'
)
),
));
为了使 CGridView 更加用户友好,您可以使用这些列
-
检索已更改的模型并显示其字符串表示形式
array( 'header' => Yii::t('app', 'Name'), 'value' => '$data->findModel()', ),
-
如果该字段是关系,则查找相关模型并使用该模型而不是显示外键值
array( 'name' => 'old_value', 'value' => '$data->getOldValue()', ), array( 'name' => 'new_value', 'value' => '$data->getNewValue()', ),