CheckPermission.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Auth;
  6. use Illuminate\Support\Facades\Route;
  7. use Spatie\Permission\Exceptions\UnauthorizedException;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use App\Models\Enums\PermissionType;
  10. class CheckPermission
  11. {
  12. /**
  13. * Handle an incoming request.`
  14. *
  15. * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
  16. */
  17. public function handle(Request $request, Closure $next): Response
  18. {
  19. $permission = Route::currentRouteName();
  20. $permission=$this->RouteGetType($request,$permission);
  21. if (Auth::user()->hasPermissionTo($permission)) {
  22. return $next($request);
  23. }
  24. throw UnauthorizedException::forPermissions([$permission]);
  25. }
  26. public function RouteGetType(Request $request,string $permission){
  27. switch ($permission) {
  28. case 'config.index':
  29. $group = $request->get("group", []);
  30. foreach ($group as $item){
  31. $permission=$this->findPermission($item);
  32. }
  33. return $permission;
  34. break;
  35. case 'config.setting':
  36. $group = $request->json()->all();
  37. if(!empty($group) && is_array($group) && isset($group[0]['group'])){
  38. $permission=$this->findPermission($group[0]['group']);
  39. }
  40. return $permission;
  41. break;
  42. default:
  43. return $permission;
  44. }
  45. }
  46. public function findPermission(string $type){
  47. $objectType=PermissionType::tryFrom($type);
  48. $permissionType=$objectType->getPermissionType();
  49. return $permissionType;
  50. }
  51. }