CheckPermissionAttr.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace app\admin\middleware;
  3. use app\admin\attr\Permission;
  4. use app\common\exception\CatchException;
  5. use app\common\model\Admin;
  6. use think\Request;
  7. class CheckPermissionAttr
  8. {
  9. public function handle(Request $request, \Closure $next)
  10. {
  11. return $next($request);
  12. // 通过依赖注入获取admin
  13. $admin = app(Admin::class);
  14. $role = $admin->role;
  15. $codes = $role->codes;
  16. // 获取权限注解
  17. $controller = 'app\\admin\\controller\\'. $request->controller();
  18. $ref = new \ReflectionClass($controller);
  19. $attrs = $ref->getAttributes(Permission::class);
  20. // 检查权限
  21. /**
  22. * @var \ReflectionAttribute $attrRaw
  23. */
  24. foreach($attrs as $attrRaw) {
  25. /**
  26. * @var Permission
  27. */
  28. $attr = $attrRaw->newInstance();
  29. $permission = $attr->value;
  30. if (false && !in_array($permission, $codes)) {
  31. throw new CatchException("未具有权限$permission, 禁止访问", 403);
  32. }
  33. }
  34. return $next($request);
  35. }
  36. }