AdminAuthMiddleware.php 1.9 KB

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