Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

270
Vistas
Pasar una matriz a un middleware en laravel

Obtuve este identificador en un middleware llamado rolMiddleware:

 public function handle($request, Closure $next, $roles) { //dd($request->user()); foreach ($roles as $rol) { if ($request->user()->getTipoUsuario($request->user()->tipo_usuario_id)->getNombreTipoUsuario() == $rol) { return $next($request); } } abort(403, "¡No hay autorizacion!"); }

Pero $roles es una matriz, aquí está la ruta donde uso el middleware:

 Route::get('/mid', ['middleware' => 'roles:super admin', function () { return "done"; }]);

y el error que me da es:

 ErrorException in RolMiddleware.php line 22: Invalid argument supplied for foreach()

Puede pensar que no necesito una matriz porque solo la estoy usando en superadministrador, para esa ruta solo necesito superadministrador, pero habría rutas que pueden ser para superadministrador y el administrador de un área.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En laravel, puede separar los parámetros que desea pasar al middleware usando comas , de la siguiente manera:

 Route::get('/mid', ['middleware' => 'roles:super,admin', function () { // ^ note this return "done"; }]);

tenga en cuenta que esto no enviará parámetros como una matriz, por lo que no puede recorrer $roles a menos que use los parámetros pasados como parámetros de puntos suspensivos de la siguiente manera:

 public function handle($request, Closure $next, ...$roles)

más bien, deberá usar un solo parámetro para cada función:

 public function handle($request, Closure $next, $role1, $role2) // .... and so on
over 4 years ago · Santiago Trujillo Denunciar

0

Ruta:

 Route::get('/access', ['middleware' => 'hasroles:super,admin', function () { }]);

pasar un parámetro para verificar que el usuario haya creado un permiso en mi causa

 Route::middleware('admin')->namespace('Admin')->prefix('admin')->group(function(){ Route::get('/home', 'MainController@getIndex')->name('admin.index')->middleware("hasrole:create");

Programa intermedio:

1. Uso de parámetros

 public function handle($request, Closure $next, $parm1, $parm2){}

2. Usando var-arg

 public function handle($request, Closure $next, $parm1, $parm2){} public function handle($request, Closure $next, ...$parm1){}

Uso de middleware bidireccional

1: Registrar rutaMiddleware

 // Within App\Http\Kernel Class... protected $routeMiddleware = [ 'hasrole' => \Illuminate\Auth\Middleware\HasRole::class,

Usando:

 Route::get('admin/profile', function () { })->middleware('hasrole');

2: No registrarse en routeMiddleware

Usando:

 use App\Http\Middleware\HasRole; Route::get('admin/profile', function () { // })->middleware(HasRole::class);
over 4 years ago · Santiago Trujillo Denunciar

0

Enviar parámetro como cadena como como

 Route::prefix('panel')->middleware('auth:admin|editor')->group(function (){ Route::get('/', [SiteController::class, 'index'])->name('site.index'); }

Programa en middleware para detectar esta cadena como matriz

 if (in_array(Auth::user()->rule, explode('|', $access))) { return $next($request); } else { return redirect()->route('site.denied'); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda