No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

42 líneas
983B

  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Codes\UserRole;
  4. use App\Sessions\SessionUser;
  5. use Closure;
  6. use Illuminate\Http\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. class RoleMiddleware
  9. {
  10. public function __construct(private SessionUser $sessionUser)
  11. {
  12. $sessionUser->init();
  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, string $rolesStr): Response
  20. {
  21. $allowRoles = [];
  22. foreach (explode("-", $rolesStr) as $roleSrt) {
  23. $role = UserRole::from($roleSrt);
  24. $allowRoles[] = $role;
  25. }
  26. $currentRole = $this->sessionUser->user()->role;
  27. if (in_array($currentRole, $allowRoles, true) === false) {
  28. $path = $request->path();
  29. abort(403);
  30. }
  31. return $next($request);
  32. }
  33. }