CheckPermissionAttr.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. // 通过依赖注入获取admin
  12. $admin = app(Admin::class);
  13. $role = $admin->role;
  14. $codes = $role->codes;
  15. // 获取权限注解
  16. $controller = 'app\\admin\\controller\\'. $request->controller();
  17. $ref = new \ReflectionClass($controller);
  18. $attrs = $ref->getAttributes(Permission::class);
  19. // 检查权限
  20. /**
  21. * @var \ReflectionAttribute $attrRaw
  22. */
  23. foreach($attrs as $attrRaw) {
  24. /**
  25. * @var Permission
  26. */
  27. $attr = $attrRaw->newInstance();
  28. $permission = $attr->value;
  29. if (false && !in_array($permission, $codes)) {
  30. throw new CatchException("未具有权限$permission, 禁止访问", 403);
  31. }
  32. }
  33. return $next($request);
  34. }
  35. }