ThinkPHP6利用路由中间件记录用户操作日志

2021-05-11   阅读:172   分类:前端    标签: TP6

效果展示:

image.png

思路:

1、中间件

2、路由加上中间件

3、中间件里获取相关操作、ip、请求参数(转json格式入库),请求类型

4、利用模型进行数据写入

5、数据表设计

示例代码:

1、在所属模块中间件目录middleware下创建OperationLog.php中间件,并编写如下代码

<?php
/**
 *
 * User: jyblogs
 * Date: 2021/5/11
 * Email: <2938039696@qq.com>
 * 日志中间件
 **/
declare (strict_types=1);

namespace app\union\middleware;
use app\union\model\Adminlist;
use app\union\model\AdminLog;
use think\facade\Cookie;

class OperationLog
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        $admin_id = Cookie::get('admin_id');  //管理员id
        $method = $request->method();  //请求方法比如GET POST
        $path= $request->url(true);   //请求url
        $ip = $request->ip();  //ip
        $input = $request->param();  //请求参数
        if(!$request->isGet()){
            self::writeLog($admin_id,$input,$path,$method,$ip);
        }
        return $next($request);

    }
    public function writeLog($admin_id,$input,$path,$method,$ip){

        $admin = Adminlist::where('id',$admin_id)->find();
        if($admin) {
            $admin_id = $admin['id'];
            $admin_name = $admin['admin_name'];
        }else{
            return returnJson('500','非法操作');
        }
        $log = new AdminLog;
        $log->admin_id = $admin_id;
        $log->admin_name = $admin_name;
        $log->path = $path;
        $log->method = $method;
        $log->ip = $ip;
        $log->content = json_encode($input, JSON_UNESCAPED_UNICODE);
        $log->created_at = time();
        $log->save();

    }
}
?>

2、模型代码

<?php

namespace app\union\model;

use think\facade\Cookie;
use think\Model;

class Defendlist extends Model
{
    protected $pk = 'id';
    // 设置当前模型对应的完整数据表名称
    protected $name = 'sys_admin_log';

}
?>

3、使用路由中间件:在路由文件下加入如下代码

<?php
->middleware([\app\union\middleware\OperationLog::class])
?>

4、附:数据表设计

CREATE TABLE `tp_sys_admin_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `admin_name` varchar(255) DEFAULT NULL COMMENT '账号',
  `created_at` int(12) DEFAULT NULL COMMENT '操作时间',
  `ip` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT 'ip',
  `content` text COMMENT '日志',
  `admin_id` int(11) DEFAULT NULL COMMENT '账号id',
  `path` varchar(255) DEFAULT NULL COMMENT '操作路由',
  `method` varchar(255) DEFAULT NULL COMMENT '操作方法',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='管理员操作日志表';


【腾讯云】618云上GO!云服务器限时秒杀,1核2G首年95元!

‘简忆博客’微信公众号 扫码关注‘简忆博客’微信公众号,获取最新文章动态
转载:请说明文章出处“来源简忆博客”。http://www.tpxhm.com/fdetail/688.html

×
觉得文章有用就打赏一下文章作者
微信扫一扫打赏 微信扫一扫打赏
支付宝扫一扫打赏 支付宝扫一扫打赏

文章评论(0)

登录
简忆博客壁纸 头像

简忆博客
勤于学习,乐于分享。

置顶推荐

打赏本站

如果你觉得本站很棒,可以通过扫码支付打赏哦!
微信扫码:你说多少就多少~
微信扫码
支付宝扫码:你说多少就多少~
支付宝扫码
×