tutorial laravel

Menggunakan Middleware Pada Laravel

Berikut ini saya hendak membagikan pengalaman saya menggunakan middleware pada laravel. Middleware atau yang di nama kan filter pada laravel 4 (dengan konsep yang agak berbeda) ini berfungsi sebagai penengah dari request yang masuk ke aplikasi kita, contohnya seperti men-check status login user atau bisa juga di gunakan untuk custom authentifikasi pada user. Secara garis besar middleware ini bertugas men-jembatani antara request yang masuk dan controller mana yang di tuju. Contoh real case nya adalah, saya biasanya manfaatkan middleware ini untuk membedakan mana user dengan status admin dan mana yang non admin. Namun sebelum masuk ke tahap tersebut ada baiknya kita mengenal dasar-dasar dari middleware ini. Berikut adalah pengalaman saya menggunakan middleware pada laravel .

Untuk membuat middleware baru, tinggal ketikan perintah berikut ini di cmd :

php artisan make:middleware CheckUserStatus

Jika berhasil maka secara otomatis kita akan di buatkan file baru di dalam folder \app\Http\Middleware, dan nama filenya sama dengan nama middleware yang baru kita buat (CheckUserStatus.php). Jika di buka kurang lebih isi nya seperti ini :

<?php

namespace App\Http\Middleware;

use Closure;

class CheckUserStatus
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

Seperti yang kita lihat di atas, sudah di sediakan satu method dengan nama handle, di dalam method ini lah kita akan mendefinisikan filter seperti apa yang hendak kita gunakan atau kita aplikasikan. Contoh kita akan membatasi hanya user admin yang memiliki previllage untuk meng-akses halaman tertentu :

public function handle($request, Closure $next)
{
        if(Auth::user()->role === 'admin') {
            return $next($request);
        }

        return redirect('restricted-page');
}

Dari contoh di atas, kita melakukan pengecekan apakah user yang hendak meng-akses memiliki role admin atau tidak, jika ya maka request di teruskan dengan memangil return $next($request); namun apabila tidak maka user kita alihkan ke halaman restricted-page.

Ada 3 cara untuk mengimplementasikan middleware yang sudah kita buat, secara global, pada routes tertentu atau pada controller tertentu. Untuk menggunakannya secara global buka file app/Http/Kernel.php dan kita tinggal menambahkan middleware yang sudah kita buat tadi ke dalam attribute protected $middleware, sehingga menjadi :

protected $middleware = [
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,  
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckUserStatus::class, // <- middleware baru
    ];

Untuk menggunakannya pada routes tertantu buka file app/Http/Kernel.php dan kita tinggal menambahkan middleware yang sudah kita buat tadi ke dalam attribute protected $routeMiddleware, sehingga menjadi :

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'role' => \Illuminate\Auth\Middleware\CheckUserStatus::class, // <- middleware baru
    ];

Setelahnya kita tinggal meambahkan middleware tersebut ke dalam routes.php. Contoh nya :

Route::group(['prefix' => '', 'middleware' => ['role']], function() {
    // ROUTE KHUSUS UNTUK ROLE ADMIN
});

Saya sendiri memanfaatkan router group untuk memudahkan pemetaan pada route mana saja middleware tsb hendak saya aplikasikan. Untuk penjelasan tentang router bisa di lihat pada https://soft-gain.com/2019/10/09/router-pada-laravel/

Terakhir kita akan mendaftarkan nya pada controller tertentu. Bedanya, jika di daftarkan pada controller tertentu kita bisa memilih atau pun men-exclude method tertentu. Contoh nya seperti ini :

class sg_barang extends Controller
{
    function __construct()
    {
        $this->middleware('role');
        $this->middleware('selected-middleware', ['only' => ['method-a', 'method-b']]); // memilih method tertentu
        $this->middleware('exclude-middleware', ['except' => ['method-c']]) ; // men-exclude method tertentu
    }
}  

Demikian lah sedikit yang bisa saya bagikan perihal middleware pada laravel, untuk lebih jelas nya tentu bisa merujuk pada dokumetasi resmi nya https://laravel.com/docs/master/middleware.

Terima Kasih.

Leave a Reply

Your email address will not be published. Required fields are marked *