ActionLog.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. /**
  3. * 后台操作日志中间件
  4. */
  5. namespace app\middleware\admin;
  6. use app\model\admin\action\Log;
  7. use laytp\BaseMiddleware;
  8. use app\model\admin\Menu;
  9. use app\service\admin\admin\UserServiceFacade;
  10. use think\Request;
  11. class ActionLog extends BaseMiddleware
  12. {
  13. /**
  14. * 执行中间件
  15. * @param Request $request
  16. * @param \Closure $next
  17. * @return mixed
  18. * @throws \think\db\exception\DataNotFoundException
  19. * @throws \think\db\exception\DbException
  20. * @throws \think\db\exception\ModelNotFoundException
  21. */
  22. public function handle(Request $request, \Closure $next)
  23. {
  24. global $_W;
  25. $initUser = UserServiceFacade::init($request->header('laytp-admin-token', $request->cookie('laytpAdminToken')));
  26. // print_r($initUser);
  27. if (!$initUser || $request->isGet()) return $next($request);
  28. $requestBody = $request->post();
  29. //日志不记录密码
  30. if (isset($requestBody['password'])) {
  31. $requestBody['password'] = '******';
  32. }
  33. $rule = $request->url();
  34. $menu = '';
  35. $menus = Menu::where('rule', '=', $rule)->order('pid', 'asc')->select()->toArray();
  36. if ($menus) {
  37. for ($i = 1; $i <= 4; $i++) {
  38. if ($menus[0]['pid']) {
  39. $tempMenu = Menu::where('id', '=', $menus[0]['pid'])->find();
  40. if ($tempMenu) {
  41. $tempMenu = $tempMenu->toArray();
  42. array_unshift($menus, $tempMenu);
  43. }
  44. } else {
  45. break;
  46. }
  47. }
  48. $menuName = [];
  49. foreach ($menus as $v) {
  50. $menuName[] = $v['name'];
  51. }
  52. $menu = implode(' - ', $menuName);
  53. }
  54. Log::create([
  55. 'admin_id' => UserServiceFacade::getUser()->id,
  56. 'rule' => $request->url(),
  57. 'menu' => $menu,
  58. 'request_body' => json_encode($requestBody, JSON_UNESCAPED_UNICODE),
  59. 'request_header' => json_encode(request()->header(), JSON_UNESCAPED_UNICODE),
  60. 'ip' => request()->ip(),
  61. 'create_time' => date('Y-m-d H:i:s'),
  62. 'uniacid' => $_W['uniacid']
  63. ]);
  64. return $next($request);
  65. }
  66. }