Middleware.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace plugin\admin\api;
  3. use ReflectionException;
  4. use Webman\Http\Request;
  5. use Webman\Http\Response;
  6. use Webman\MiddlewareInterface;
  7. use support\exception\BusinessException;
  8. /**
  9. * 对外提供的鉴权中间件
  10. */
  11. class Middleware implements MiddlewareInterface
  12. {
  13. /**
  14. * 鉴权
  15. * @param Request $request
  16. * @param callable $handler
  17. * @return Response
  18. * @throws ReflectionException
  19. * @throws BusinessException
  20. */
  21. public function process(Request $request, callable $handler): Response
  22. {
  23. $controller = $request->controller;
  24. $action = $request->action;
  25. $code = 0;
  26. $msg = '';
  27. if (!Auth::canAccess($controller, $action, $code, $msg)) {
  28. if ($request->expectsJson()) {
  29. $response = json(['code' => $code, 'msg' => $msg, 'type' => 'error']);
  30. } else {
  31. if ($code === 401) {
  32. $response = response(<<<EOF
  33. <script>
  34. if (self !== top) {
  35. parent.location.reload();
  36. }
  37. </script>
  38. EOF
  39. );
  40. } else {
  41. $request->app = '';
  42. $request->plugin = 'admin';
  43. $response = view('common/error/403')->withStatus(403);
  44. }
  45. }
  46. } else {
  47. $response = $request->method() == 'OPTIONS' ? response('') : $handler($request);
  48. }
  49. return $response;
  50. }
  51. }