AdminLogBehavior.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 中闽 < 1464674022@qq.com >
  5. * Date: 2019/12/5
  6. * Time: 17:44
  7. */
  8. namespace app\common\behavior;
  9. use app\common\model\Webconfig;
  10. use think\Db;
  11. use think\Request;
  12. use think\Session;
  13. class AdminLogBehavior
  14. {
  15. /**
  16. * 全局记录admin_log
  17. * @param $params
  18. * @return bool
  19. */
  20. public function run(&$params)
  21. {
  22. $islog = Webconfig::getValue('is_log', 3600 * 24);
  23. if (empty($islog) || $islog != 1) {
  24. return true;//关闭了日志
  25. }
  26. $request = Request::instance();
  27. $data['admin_id'] = Session::get('admin')??0;//管理员id
  28. $data['ip'] = $request->ip();
  29. $data['url'] = limitStrLen('url', $request->url(), 255);
  30. $data['params'] = limitStrLen('params', $this->getParams($request->param()), 2000);
  31. $data['create_time'] = time();
  32. //获取url参数
  33. $url['module'] = $request->module();
  34. $url['controller'] = $request->controller();
  35. $url['function'] = $request->action();
  36. $ignore = ['admin/AdminLog/index', 'admin/Menu/index'];
  37. if (in_array($url['module'] . '/' . $url['controller'] . '/' . $url['function'], $ignore)) {
  38. return true;//排除
  39. }
  40. $data['admin_menu_id'] = Db::name('admin_menu')->where($url)->where('parameter', $request->query())->value('id') ?? Db::name('admin_menu')->where($url)->value('id');
  41. if (empty($data['admin_menu_id'])) {
  42. $data['admin_menu_id'] = 0;
  43. }
  44. //保存日志
  45. Db::name('admin_log')->insert($data);
  46. return true;
  47. }
  48. /**
  49. * @param $post
  50. * @return int|string
  51. */
  52. private function getParams($post)
  53. {
  54. if (empty($post) || count($post) == 0) {
  55. return "";
  56. }
  57. $str = "";
  58. foreach ($post as $key => $val) {
  59. if (is_array($val)) {
  60. $val = json_encode($val, 320);
  61. }
  62. if (empty($str)) {
  63. $str .= $key . '=' . $val;
  64. } else {
  65. $str .= '&' . $key . '=' . $val;
  66. }
  67. }
  68. return $str;
  69. }
  70. /**
  71. * 更新最新一条日志
  72. * @param $param string [新的param]
  73. * @param $cover boolean [true覆盖param,false追加param]
  74. * @return bool
  75. */
  76. public function updateLastLog($param, $cover = true)
  77. {
  78. $islog = Webconfig::getValue('is_log', 3600 * 24);
  79. if (empty($islog) || $islog != 1) {
  80. return true;//关闭了日志
  81. }
  82. $model = new \app\admin\model\AdminLog();
  83. $last = $model->order('id desc')->find();
  84. $param = $cover ? $param : limitStrLen('params', $last->params . ' ' . $param, 2000);
  85. $model->save(['params' => $param], ['id' => $last->id]);
  86. }
  87. }