Tutoriel Laravel 8 Middleware pour les pages d'administration étape par étape - Letecode

Tutoriel Laravel 8 Middleware pour les pages d'administration étape par étape

Apprendre à ajouter un accès à certaines pages que par les administrateurs avec le middleware en Laravel 8.

Jean Claude Mbiya
Jean Claude Mise à jour : 21 décembre 2022 3672 1

Vous avez une application web en Laravel, dans laquelle vous aimeriez implémenté une partie utilisateur ayant des accès limités et une partie administrateur ayant tous les accès nécessaires à la gestion de votre application, dans ce tutoriel, nous allons découvrir comment le faire dans une application Laravel 8 ou ultérieur.

Nous vérifierons si l'utilisateur est administrateur ou non. S'il est utilisateur, nous n'obtiendrons aucun accès aux pages d'administration. 

Un Middleware fournit un mécanisme pratique pour filtrer les requêtes HTTP entrant dans votre application. Laravel nous fournit un middleware d'authentification qui vérifie que l'utilisateur de votre application est authentifié. Mais ici, nous utilisons le middleware Admin où l'utilisateur qui n'est pas un administrateur, ne pourra pas avoir accès aux pages d’administration et le middleware redirigera l'utilisateur vers la page d’accueil automatiquement.

Cependant, si l'utilisateur est un Admin, le middleware permettra à la demande de continuer dans l'application. Si vous cherchez comment utiliser le middleware dans laravel et comment appeler ce middleware au contrôleur ? Alors, vous n’avez pas à vous inquiéter, car ici, nous allons étape par étape apprendre à créer un middleware pour les utilisateurs qui sont administrateurs. 

Créer une fraîche application Laravel 8

Exécuter la commande suivante pour créer une application laravel :

composer create-project —prefer-dist laravel/laravel laravel-middleware

ou encore si vous avez déjà l'installeur laravel

laravel new laravel-middleware

Configuration de la base de données

Créer une base de données vide et mettez les configurations dans le fichier .env.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_middleware
DB_USERNAME=root
DB_PASSWORD=

 

Modifier la migration de la table users

Ouvrez le fichier : database\migrations\2014_10_12_000000_create_users_table.php et ajouter cette ligne dans les champs.

$table->boolean('is_admin')->nullable();

Après ajouter, exécuter la commande suivante pour lancer la migration:

php artisan migrate

Laravel Authentification 

Nous allons installer un package laravel pour générer des routes, controllers et views pour l'authentification.

composer require laravel/ui

Taper la commande suivante pour génerer les vues et les controllers d’authentification 

php artisan ui bootstrap --auth

Installer les dépendances NPM

npm install
npm run dev

création du middleware

Exécuter la commande suivante pour créer le middleware IsAdmin

php artisan make:middleware IsAdmin

un fichier middleware est créé dans App\Http\Middleware\IsAdmin.php

ouvrez le fichier du middleware créé et ajouter le code suivant

if (Auth::user() &&  Auth::user()->is_admin == 1) {
    return $next($request);
}

return redirect('/')->with('error','Vous n'êtes pas un admin');

 

Ajoutons maintenant ce middleware dans le fichier kernel.php 

à la propriété protected $routeMiddleware 

/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
  'auth' => \App\Http\Middleware\Authenticate::class,
  ...
  'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
  'admin' => \App\Http\Middleware\IsAdmin::class,
];

 

Route protegé par un middleware admin

Créez une route, qui doit être accessible que par l'administrateur, et si l'utilisateur n'est pas un administrateur, il sera rédirigé vers la page d'accueil; sinon, il peut accéder à cette page. Maintenant, si nous attribuons ce middleware Admin à une route, ces routes seront désormais protégées et accessibles uniquement lorsqu'un utilisateur autorisé est administrateur; sinon, il lui redirigera vers la page d'accueil.

Route::group(['middleware' => ['admin']], function () {
  Route::get('admin', 'HomeController@admin')->name('admin');
});

Création et modification des views 

Ajoutons le lien qui amène à la page admin dans la page home après que l’utilisateur soit connecté.

resources\views\home.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
  <div class="row justify-content-center">
      <div class="col-md-8">
          <div class="card">
              <div class="card-header">{{ __('Dashboard') }}</div>

              <div class="card-body">
                  @if (session('status'))
                      <div class="alert alert-success" role="alert">
                          {{ session('status') }}
                      </div>
                    @endif

                    {{ __('You are logged in!') }}

                  <div>
                      <a href="{{route('admin')}}">voir l'administration</a>
                  </div>
              </div>
          </div>
      </div>
  </div>
</div>
@endsection

 

créer une page à afficher lorsque l’utilisateur est un admin

resources\views\admin-page.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
  <div class="row justify-content-center">
      <div class="col-md-8">
          <div class="card">
              <div class="card-header">{{ __('Dashboard') }}</div>
              <div class="card-body">
                  @if (session('status'))
                      <div class="alert alert-success" role="alert">
                          {{ session('status') }}
                      </div>
                    @endif

                    {{ __('You are logged in!') }}

                  <div>
                      <p>Vous êtes un administrator</p>
                  </div>
              </div>
          </div>
      </div>
  </div>
</div>
@endsection

 

Nous allons mettre à jour notre route admin, l’utilisateur doit être connecté et être un administrateur , donc nous devons mettre deux middleware dans une meme route.

Route::group(['middleware' => ['auth', 'admin']], function () {
  Route::get('admin', 'HomeController@admin')->name('admin');
});

 

Génerer les données de test

Pour mieux faire notre test, nous allons utiliser des Seeders pour générer des des utilisateurs dans la base de données.

créer le seeder des users en tapant : 

php artisan make:seeder UsersSeeder

mettre le code suivant dans le fichier : 

database/seeds/UsersSeeder.php

<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;

class UsersSeeder extends Seeder
{
  /**
   * Run the database seeds.
   *
   * @return void
     */

  public function run()
  {
        User::truncate();

         $users = [
            [

            'name' => 'Admin',
            'email' => '[email protected]',
            'password' => '12345678',
            'is_admin' => 1,
          ],
          [
            'name' => 'User',
            'email' => '[email protected]',
            'password' => '13456',
            'is_admin' => 0,
          ],
           [
            'name' => 'Client',
            'email' => '[email protected]',
            'password' => '13456',
            'is_admin' => 0,
          ]
          ];


        foreach($users as $user)
        {
            User::create([
             'name' => $user['name'],
             'email' => $user['email'],
             'password' => Hash::make($user['password'])
           ]);
         }
  }
}

Nous avons créer des utilisateurs ayant comme valuer sur le champ is_admin 1 pour les admins et 0 pour les utilisateurs simples.

Puis taper la commande suivante pour executer les seeders :

php artisan db:seed —class=UsersSeeder

découvrez plus sur les seeders dans la documentation officielle.

Trouvez le projet complet sur Github ici.

Il est temps d’essayer cette merveilleuse application, connectez-vous simplement avec [email protected] ou [email protected].

Si vous vous connectez à l'aide de [email protected], vous pouvez accéder à la vue d'administration et si vous vous connectez à l'aide de [email protected], vous ne pouvez pas accéder à la section du tableau de bord d'administration.

Merci de nous laisser vos avis en commentaires, suivez nous sur Twitter, facebook et abonnez vous la newsletter pour ne rien rater.

vote
Jean Claude Mbiya
Jean Claude Mbiya

Développeur Web full stack, Développeur Android (Certifié Google AAD) Formateur dans les domaines du numérique, Créateur letecode.com 👨‍💻. Je suis un grand passionné des nouvelles technologies et j'adore partager ce que j'apprend.

0 commentaire(s)

  • Image placeholder
    BC DIBWE il y a 3 ans

    Simple et rapide pour poser les bases.

    Répondre

Laissez votre commentaire à @johnmbiya

ou pour laisser un commentaire