Di dalam Laravel, kita bisa dengan mudah membagi role antar user. Salah satu caranya adalah menggunakan middleware. Dengan menggunakan middleware, sistem akan memverifikasi role user yang login. Jika rolenya sesuai, maka akan diizinkan mengakses, tetapi jika tidak sesuai, maka akan ditolak. Misalnya, seseorang ingin mengakses halaman: http://contoh.com/operator/data-pembayaran, maka middleware akan memeriksa apakah user yang mengakses tersebut mempunyai role operator atau jika. Jika benar, maka akan diizinkan masuk. Hal ini akan sangat berguna jika seseorang dengan jahil mengetikan URL di address bar.
Membuat Middleware Membuat middleware baru dengan nama Role dengan perintah berikut:
php artisan make:middleware Role;
Maka di folder app/Http/Middleware akan terdapat file baru dengan nama Role.php, disinilah kita akan melakukan pemeriksaan role user yang mengakses. Pada file ini, ubah method handle() sehingga menjadi seperti berikut:
public function handle(Request $request, Closure $next, $role)
{
if ($request->user()->role == $role) {
return $next($request);
}
abort(403, 'Anda tidak memiliki hak mengakses laman tersebut!');
}
Pada method handle() kita menambah parameter baru, yaitu $role yang nantinya akan diberikan argumen role user yang akan diperiksa. Pada kode diatas, jika user tidak memiliki role seperti yang diperiksa, maka akan ditampilkan pesan bahwa user tersebut tidak memiliki hak untuk mengakses lamana tersebut. Jika ingin mengalihkan user ke halaman login, gunakan kode berikut:
public function handle(Request $request, Closure $next, $role)
{
if ($request->user()->role == $role) {
return $next($request);
}
return redirect()
->to(route('login'));
}
Maka jika user tidak memiliki role seperti yang diperiksa, akan dialihkan ke halaman login. Anda bisa juga mengganti dengan route lain, atau pesan error yang lain.
Mendaftarkan Middleware ke Kernel
Supaya middleware yang baru saja dibuat bisa dikenali dan digunakan, kita perlu mendaftarkannya ke kernel. Caranya, buka file app/Http/Kernel.php dan pada properti $routeMiddleware tambahkan kode berikut:
'role' => \App\Http\Middleware\Role::class;
Sehingga properti $routeMiddleware akan menjadi seperti berikut:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'scopes' => \Laravel\Passport\Http\Middleware\CheckScopes::class,
'scope' => \Laravel\Passport\Http\Middleware\CheckForAnyScope::class,
'role' => \App\Http\Middleware\Role::class,
];
Jika sudah, middleware tadi sudah siap digunakan.