php后台管理员操作日志,非常简单的方法在你的后台添加《系统管理员操作日志》的功能...

该博客分享了一种使用Yii2框架轻松记录管理员后台操作日志的方法。通过监听ActiveRecord的插入、更新和删除事件,动态生成并保存日志到admin_log表中,包括操作者、操作类型、涉及的表和字段等详细信息。提供了一个完整的代码示例,包括创建AdminLog组件和配置文件的修改,以及数据库表结构和模型生成。
摘要由CSDN通过智能技术生成

出于监控多用户操作后台的目的,往往需要把各个管理员操作了什么记录下来。这个功能用yii2来实现简直是太简单了!下边上代码~

此demo基于advanced,具体功能可以参考demo 帐号demo 密码111111

在backend目录创建components/AdminLog.php

namespace backend\components;

use Yii;

use yii\helpers\Url;

class AdminLog

{

public static function write($event)

{

// 排除日志表自身,没有主键的表不记录(没想到怎么记录。。每个表尽量都有主键吧,不一定非是自增id)

if($event->sender instanceof \common\models\AdminLog || !$event->sender->primaryKey()) {

return;

}

// 显示详情有待优化,不过基本功能完整齐全

if ($event->name == ActiveRecord::EVENT_AFTER_INSERT) {

$description = "%s新增了表%s %s:%s的%s";

} elseif($event->name == ActiveRecord::EVENT_AFTER_UPDATE) {

$description = "%s修改了表%s %s:%s的%s";

} else {

$description = "%s删除了表%s %s:%s%s";

}

if (!empty($event->changedAttributes)) {

$desc = '';

foreach($event->changedAttributes as $name => $value) {

$desc .= $name . ' : ' . $value . '=>' . $event->sender->getAttribute($name) . ',';

}

$desc = substr($desc, 0, -1);

} else {

$desc = '';

}

$userName = Yii::$app->user->identity->username;

$tableName = $event->sender->tableSchema->name;

$description = sprintf($description, $userName, $tableName, $event->sender->primaryKey()[0], $event->sender->getPrimaryKey(), $desc);

$route = Url::to();

$userId = Yii::$app->user->id;

$ip = ip2long(Yii::$app->request->userIP);

$data = [

'route' => $route,

'description' => $description,

'user_id' => $userId,

'ip' => $ip

];

$model = new common\models\AdminLog();

$model->setAttributes($data);

$model->save();

}

}

在backend/config/main.php添加

'on beforeRequest' => function($event) {

\yii\base\Event::on(\yii\db\BaseActiveRecord::className(), \yii\db\BaseActiveRecord::EVENT_AFTER_INSERT, ['backend\components\AdminLog', 'write']);

\yii\base\Event::on(\yii\db\BaseActiveRecord::className(), \yii\db\BaseActiveRecord::EVENT_AFTER_UPDATE, ['backend\components\AdminLog', 'write']);

\yii\base\Event::on(\yii\db\BaseActiveRecord::className(), \yii\db\BaseActiveRecord::EVENT_AFTER_DELETE, ['backend\components\AdminLog', 'write']);

},

mysql中创建admin_log表

CREATE TABLE `admin_log` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`route` varchar(255) NOT NULL DEFAULT '',

`description` text,

`created_at` int(10) NOT NULL,

`user_id` int(10) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

用gii生成AdminLog模型

php yii gii/model --ns=common\\models --modelClass=AdminLog --tableName=admin_log

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值