Laravel 全局记录管理员的所有操作(Gist 版本)

链接地址 https://gist.github.com/Hanson/b8916bf13c3... (请保持点 star 的习惯)

用处

在某些系统,可能会要求记录每个管理员的操作,以防一些操作不当的责任追究(例如改错价格),此时增加全局的监听会使你省去很多不必要的代码,不用一个个控制器去增加记录。

原理

  • 通过监听 laravel 自身的 eloquent.* 事件
  • 筛选 model 的 created/updated/deleted 事件
  • 筛选掉非管理员操作的情况(视自身情况而定)
  • 如果是编辑,可以根据模型的 original 以及 attribute 判断更改的字段内容
  • 存储日志结果(根据你的需求来定字段)
本作品采用《CC 协议》,转载必须注明作者和本文链接
❤️ 微信生态自动智能化方案加微信:hansonskr ❤️ 备注:vbot
Image
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8

我选择用中间件,terminal 里把日志丢到Redis里再用定时任务统一写入数据库。
个人认为日志这东西要根据请求划分开,而且有时候还需要记录执行过程中的一些临时信息。真到了要查日志分析问题的时候,单记录这几个事件效果有限。

我把日志细分了5类,会员/管理员/计划任务/任务队列/回调接口,查询的时候比较方便一些
file

file

6年前 评论
Image 张三 6年前
Image s51983 (作者) 6年前
Image 萧晔离 6年前
Image s51983 (作者) 6年前
Image 萧晔离 6年前
Image Charsen 5年前
Image s51983 (作者) 5年前
Image Charsen 5年前

@s51983 你这个做的也很可以,不过两个都不是同一维度,一个是数据库的变化,一个是请求,不是同一维度,看具体需求吧

6年前 评论
jcc123

链接访问不了啊

6年前 评论

谢谢,打开了我的思路

6年前 评论

可以用 $model->getChanges() 获取变化的内容 :stuck_out_tongue_winking_eye:

6年前 评论

@张铭阳 绵羊流批,新姿势

6年前 评论

还不错,感谢分享。
有个问题值得提下,AdminLog::query()->create(。。这个操作会继续触发模型插入事件,然后会继续写入日志,这样会一直循环写日志

6年前 评论

@search-in 嗯,你说对了,实际上这段代码我是精简出来了,还有其他判断,因为跟业务有关没写出来,这个可以加以判断即可

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!