CheckPermission.php 1.9 KB

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