AdminAuthMiddleware.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. /**
  3. * @package merchant
  4. *
  5. * @author xaboy
  6. * @day 2020-04-10
  7. *
  8. *
  9. */
  10. namespace app\common\middleware;
  11. use app\common\repositories\system\auth\MenuRepository;
  12. use app\common\repositories\system\auth\RoleRepository;
  13. use app\Request;
  14. use think\exception\ValidateException;
  15. use think\Response;
  16. class AdminAuthMiddleware extends BaseMiddleware
  17. {
  18. public function before(Request $request)
  19. {
  20. $admin = $request->adminInfo();
  21. /** @var RoleRepository $role */
  22. $role = app()->make(RoleRepository::class);
  23. /** @var MenuRepository $menu */
  24. $menu = app()->make(MenuRepository::class);
  25. if ($admin->level) {
  26. $rules = $role->idsByRules(0, $admin->roles);
  27. $menus = $menu->idsByRoutes($rules);
  28. } else {
  29. $rules = [];
  30. $menus = [];
  31. }
  32. $request->macro('adminAuth', function () use (&$menus) {
  33. return $menus;
  34. });
  35. $request->macro('adminRule', function () use (&$rules) {
  36. return $rules;
  37. });
  38. $request->macro('checkAuth', function ($name, $vars) use (&$admin, &$menus, &$menu) {
  39. if (!$name || !$admin->level) return true;
  40. $isset = false;
  41. foreach ($menus as $_menu) {
  42. $keys = $menu->tidyParams($_menu['params']);
  43. if ($_menu['route'] != $name) continue;
  44. $isset = true;
  45. if (!count($keys)) return true;
  46. if ($menu->checkParams($keys, $vars))
  47. return true;
  48. }
  49. if ($isset || $menu->routeExists($name))
  50. return false;
  51. return true;
  52. });
  53. $rule = $request->rule();
  54. if (!$request->checkAuth($rule->getName(), $rule->getVars()))
  55. throw new ValidateException('没有权限访问');
  56. }
  57. public function after(Response $response)
  58. {
  59. // TODO: Implement after() method.
  60. }
  61. }