SystemLog.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: sai <1430792918@qq.com>
  6. // +----------------------------------------------------------------------
  7. namespace plugin\saiadmin\app\middleware;
  8. use ReflectionClass;
  9. use Webman\Event\Event;
  10. use Webman\Http\Request;
  11. use Webman\Http\Response;
  12. use Webman\MiddlewareInterface;
  13. use plugin\saiadmin\exception\ApiException;
  14. class SystemLog implements MiddlewareInterface
  15. {
  16. /**
  17. * @param Request $request
  18. * @param callable $handler
  19. * @return Response
  20. */
  21. public function process(Request $request, callable $handler): Response
  22. {
  23. // 通过反射获取控制器哪些方法不需要登录
  24. $controller = new ReflectionClass($request->controller);
  25. $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? [];
  26. // 访问的方法需要登录
  27. if (!in_array($request->action, $noNeedLogin)) {
  28. try {
  29. // 记录日志
  30. Event::emit('user.operateLog', true);
  31. } catch (\Throwable $e) {
  32. throw new ApiException('登录凭获取失败,请检查');
  33. }
  34. }
  35. return $handler($request);
  36. }
  37. }