web-dev-qa-db-fra.com

Laravel ajouter un middleware personnalisé au groupe de routage

dans mon application web, j'ai un panneau d'administration et j'essaie de donner accès aux utilisateurs qu'ils ont un rôle d'administrateur par ce code:

namespace App\Http\Middleware;
use Closure;
class CheckUserAdminRole
{
    public function handle($request, Closure $next)
    {
        if (auth()->check()) {
            if (auth()->check() && !auth()->user()->hasRole('admin')) {
                auth()->logout();
                return redirect(route('system.messages','userIsNotAdmin'));
            }
        }
        return $next($request);
    }
}

et dans mes routs j'ai ce groupe de routes:

Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web'], 'prefix' => 'dashboard'], function () {
    $this->group(['prefix' => 'administrator'], function () {
        $this->get('panel', 'AdminController@index');
});

mon noyau:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    ...
    \App\Http\Middleware\CheckUserAdminRole::class,
];

maintenant quand j'ajoute mon middleware en tant que CheckUserAdminRole au groupe de routage comme avec ce code:

Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','CheckUserAdminRole'], 'prefix' => 'dashboard'], function () {

je reçois cette erreur:

Class CheckUserAdminRole does not exist

ces codes n'ont pas pu résoudre mon problème:

php artisan route:clear
php artisan cache:clear
php artisan config:clear
composer dump-autoload
4
DolDurma

Au lieu d'enregistrer votre middleware dans le $middleware array, vous devez l'enregistrer dans $routeMiddleware ainsi:

protected $routeMiddleware = [
    ...
    'checkAdmin' => \App\Http\Middleware\CheckUserAdminRole::class,
];

Remarque: enregistrement d'un logiciel intermédiaire dans le $middleware array entraîne son exécution pour chaque requête et n'est donc pas applicable sur des routes spécifiques.

Ensuite, vous pouvez l'utiliser dans vos itinéraires avec le nom checkAdmin:

Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','checkAdmin'], 'prefix' => 'dashboard'], function () {

Source

6
SystemGlitch

Vous pouvez également utiliser le middleware et le groupe de routage ensemble comme suit:

Route::group(['prefix' => 'admin',  'middleware' => 'auth'], function()
{
    //All the routes that belongs to the group goes here
    Route::get('dashboard', function() {} );
});
2
Emeka Augustine

Vous pouvez essayer un middleware avec préfixe et groupes.

Route::middleware(['Auth'])->prefix('api/')->group(function() {
    Route::group(['prefix' => 'review/'], function () {
       Route::get('/', 'User\Controllers\Api\UserController@getUserReviews');
    });
});

j'espère que ça aide

0
Kaushik shrimali