Tutorial Laravel 5.5 - Middleware (Bagian 3)



Setelah sebelumnya membahas mengenai routing, artikel kali ini akan melanjutkan pembahasan tentang Middleware. Middleware digunakan sebagai filter sebelum program menuju ke suatu controller dan action. Seperti yang sudah dibahas pada bagian routing, semua url yang anda tulis pada routes/web.php mempunyai middleware web secara default.

Sebagai contoh misalnya anda ingin membuat halaman admin yang hanya bisa diakses oleh user dengan level admin, maka taruhlah semua url halaman admin tersebut pada group middleware admin. Kemudian buatlah pengecekan userlevel pada middleware tersebut. Penggunaan middleware ini dapat mempermudah dan mempersingkat pengecekan dibandingkan menuliskan kode pengecekan di masing-masing action.

#MEMBUAT MIDDLEWARE BARU

Untuk membuat middleware baru gunakan perintah dari php artisan make:middleware.

php artisan make:middleware TokenAdmin

Ketikkan perintah tersebut melalui command prompt pada folder proyek Laravel anda. Kode di atas akan membuat middleware baru dengan nama TokenAdmin. Semua file middleware dari framework Laravel 5.5 ini terletak pada direktori app/Http/Middleware.

Berikut ini adalah contoh dari middleware yang berguna untuk melakukan pengecekan apakah user yang mengakses url tersebut sudah login dan mempunyai userlevel admin.


<?php

namespace App\Http\Middleware;

use Closure;
use Session;
use App\Model\User;

class TokenAdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(!Session::get('userinfo')) {
            return redirect('/backend/login');
        }else{
            $userinfo = Session::get('userinfo');
  //Jika bukan admin
         if($userinfo['user_level_id'] == 3){
                return redirect('/');
            }
        }
        return $next($request);
    }
}

Contoh kode di atas di ambil dari program ODWIN-CMS yang saya buat sebelumnya. Pada kode di atas dilakukan pengecekan jika user belum login maka url akan di-redirect menuju ke halaman login, dan jika user sudah login tetapi tidak memiliki level sebagai admin akan di-redirect menuju halaman index.


#REGISTERING MIDDLEWARE

Setelah membuat middleware baru, middleware tersebut perlu didaftarkan terlebih dahulu sebelum bisa digunakan. Cara untuk mendaftarkan middleware ada 2 macam yaitu secara global dan yang kedua adalah secara spesifik. File yang digunakan untuk mendaftarkan middleware berada pada direktori app/Http/Kernel.php.

Untuk mendaftarkan middleware secara global tambahkan class tersebut pada variabel $middleware yang terdapat dalam file Kernel.php. 


    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\TokenAdminMiddleware::class,
    ];

Saya menambahkan middleware TokenAdmin secara global pada contoh kode di atas. Maksud dari global di sini adalah middleware baru yang anda buat tersebut akan diterapkan pada seluruh url yang terdapat pada file routing program anda.

Cara yang kedua adalah mendaftarkan middleware secara spesifik. Caranya adalah dengan menambahkan middleware baru tersebut pada variabel $routeMiddleware yang juga terdapat di dalam file Kernel.php


   protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,    
        'token_admin' => \App\Http\Middleware\TokenAdminMiddleware::class,
    ];

Pada kode di atas saya menambahkan middleware TokenAdmin dengan nama token_admin. Nama di sini nantinya akan digunakan sebagai nama middleware yang dipasang pada route. Cara memasang middleware baru ini pada route dapat dilakukan sesuai dengan kebutuhan. Anda dapat memasang middleware satu per satu pada masing-masing route maupun menggunakan cara Route Groups Middleware seperti pada tutorial routing sebelumnya.


Route::get('/tes', 'NamaControllerController@namaaction')->middleware('first', 'second');

Kode di atas adalah contoh bagaimana memasang middleware secara spesifik pada 1 route. Semoga penjelasan tentang middleware ini dapat dengan mudah dipahami. Pada artikel tutorial laravel selanjutnya akan dijelaskan mengenai CSRF Protection. Selamat mencoba. 

Tutorial Laravel 5.5 - Middleware (Bagian 3) Tutorial Laravel 5.5 - Middleware (Bagian 3) Reviewed by Donny Winarto on July 12, 2018 Rating: 5

3 comments:

  1. mas if(!Session::get('userinfo')) yang userinfo itu ngambil dari mana ya? atau emang sdh dari laravelnya

    ReplyDelete
    Replies
    1. Kalau dari program ODWIN-CMS sama ODWIN-Stok saya ngisi sessionnya di LoginController function index mas. Jadi habis selesai pengecekan login kalau datanya ada di database baru dimasukkan ke session userinfo itu.

      Delete

Powered by Blogger.