MerchantAuthMiddleware.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 MerchantAuthMiddleware 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($request->merId(), $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,1))
  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. }