mercredi 2 août 2017

Laravel multiple parameters in Route middelware not working

I have problem that using multiple parameters in my Route::middleware isn't working for me. I am trying to assign a specific Route only accessable for superuser and admin role. When I just use:

role:superuser 

it works fine, but when I add a second parameter like:

role:superuser,admin

it fails when I assign myself the admin role but still works for the superuser role.

I am confused so any help would be appreciated !!


Here is my RoleMiddleware:

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware 
{ 

/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @param string $roles 
* @return mixed 
*/ 

public function handle($request, Closure $next, ...$roles) 
{ 
    $user = $request->user();

    if ($user && $user->isSuperuser($roles)) {
        return $next($request);
    }

    return redirect('/home')->withError('U heeft niet de juiste rechten!');

    }
}

Here is my isSuperuser method in my User model:

public function isSuperuser(...$roles)
{
    if ($roles) {
        return $this->roles == $roles;
    }

    return $this->roles;
}

Last but not least my routes/web code for the middleware:

Route::get('/users', 'UsersController@index')->middleware(['role:superuser,admin']);

Btw: the method is called 'isSuperuser' but that's just a name. It also has to accept the 'admin' role at some point.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire