AuthMiddleware.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeadmin快速开发前后端分离管理后台(PHP版)
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
  8. // | github下载:https://github.com/likeshop-github/likeadmin
  9. // | 访问官网:https://www.likeadmin.cn
  10. // | likeadmin团队 版权所有 拥有最终解释权
  11. // +----------------------------------------------------------------------
  12. // | author: likeadminTeam
  13. // +----------------------------------------------------------------------
  14. declare (strict_types=1);
  15. namespace app\adminapi\http\middleware;
  16. use app\common\{
  17. cache\AdminAuthCache,
  18. service\JsonService
  19. };
  20. use think\helper\Str;
  21. /**
  22. * 权限验证中间件
  23. * Class AuthMiddleware
  24. * @package app\adminapi\http\middleware
  25. */
  26. class AuthMiddleware
  27. {
  28. /**
  29. * @notes 权限验证
  30. * @param $request
  31. * @param \Closure $next
  32. * @return mixed
  33. * @author 令狐冲
  34. * @date 2021/7/2 19:29
  35. */
  36. public function handle($request, \Closure $next)
  37. {
  38. //不登录访问,无需权限验证
  39. if ($request->controllerObject->isNotNeedLogin()) {
  40. return $next($request);
  41. }
  42. if ($request->adminInfo['login_ip'] != request()->ip()) {
  43. return JsonService::fail('ip地址发生变化,请重新登录', [], -1);
  44. }
  45. //系统默认超级管理员,无需权限验证
  46. if (1 === $request->adminInfo['root']) {
  47. return $next($request);
  48. }
  49. $adminAuthCache = new AdminAuthCache($request->adminInfo['admin_id']);
  50. // 当前访问路径
  51. $accessUri = strtolower($request->controller() . '/' . $request->action());
  52. // 全部路由
  53. $allUri = $this->formatUrl($adminAuthCache->getAllUri());
  54. // 判断该当前访问的uri是否存在,不存在无需验证
  55. if (!in_array($accessUri, $allUri)) {
  56. return $next($request);
  57. }
  58. // 当前管理员拥有的路由权限
  59. $AdminUris = $adminAuthCache->getAdminUri() ?? [];
  60. $AdminUris = $this->formatUrl($AdminUris);
  61. if (in_array($accessUri, $AdminUris)) {
  62. return $next($request);
  63. }
  64. return JsonService::fail('权限不足,无法访问或操作');
  65. }
  66. /**
  67. * @notes 格式化URL
  68. * @param array $data
  69. * @return array|string[]
  70. * @author 段誉
  71. * @date 2022/7/7 15:39
  72. */
  73. public function formatUrl(array $data)
  74. {
  75. return array_map(function ($item) {
  76. return strtolower(Str::camel($item));
  77. }, $data);
  78. }
  79. }