CheckPermission.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  11. class CheckPermission
  12. {
  13. /**
  14. * Handle an incoming request.`
  15. *
  16. * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
  17. */
  18. public function handle(Request $request, Closure $next): Response
  19. {
  20. $permission = Route::currentRouteName();
  21. $permission=$this->RouteGetType($request,$permission);
  22. if (!Auth::user()->hasPermissionTo($permission)) {
  23. throw UnauthorizedException::forPermissions([$permission]);
  24. }
  25. //检查公司是否被限制访问
  26. if (Auth::user()->company()->review_status == CompanyReviewStatus::REJECTED){
  27. throw new \Exception('Companies are restricted from accessing');
  28. }
  29. return $next($request);
  30. }
  31. public function RouteGetType(Request $request,string $permission){
  32. switch ($permission) {
  33. case 'config.index':
  34. $group = $request->get("group", []);
  35. foreach ($group as $item){
  36. $permission=$this->findPermission($item);
  37. }
  38. return $permission;
  39. break;
  40. case 'config.setting':
  41. $group = $request->json()->all();
  42. if(!empty($group) && is_array($group) && isset($group[0]['group'])){
  43. $permission=$this->findPermission($group[0]['group']);
  44. }
  45. return $permission;
  46. break;
  47. default:
  48. return $permission;
  49. }
  50. }
  51. public function findPermission(string $type){
  52. $objectType=PermissionType::tryFrom($type);
  53. $permissionType=$objectType->getPermissionType();
  54. return $permissionType;
  55. }
  56. }