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.
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 onRuta:
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);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'); }