Dalam sebuah sistem informasi, pembagian role atau peran setiap user adalah salah satu hal yang sangat penting. Dengan adanya pembagian role, keamanan data dalam sistem informasi akan lebih baik. Misalnya, dalam sistem informasi pembayaran SPP, role siswa hanya bisa melihat data pembayaran miliknya sendiri, dan melakukan pembayaran. Sedangkan role operator bisa melakukan verifikasi pembayaran siswa, menerbitkan penagihan SPP, membuat laporan, dan sebagainya. Kemudian role admin bisa memantau aktivitas dalam sistem informasi, seperti penambahan data, perubahan data, dan sebagainya. Jika diperlukan, bisa ditambahkan lagi role lain seperti kepala sekolah dan orang tua. Tentunya sesuai kebutuhan dan rancangan. Show Pembagian role ini tentu sangat penting, kita tidak ingin kan seorang siswa bisa melihat data pembayaran siswa lain, atau malah mengubah data pembayaran? 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:
Daftar Isi
Membuat Kolom Role di Tabel `users`Disini saya mengamsumsikan Anda sudah mempunyai authentikasi dengan Laravel, baik menggunakan Laravel UI, Laravel Breeze, maupun package lain. Dan data user disimpan di tabel Pertama, kita harus membuat kolom
baru ditabel users, yaitu kolom php artisan make:migration add_role_to_users_table Kemudian pada method Schema::table('users', function (Blueprint $table) { $table->string('role', 16)->default('user')->after('password'); }); Jika sudah, jalankan migration dengan perintah Selanjutnya, buat 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 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 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 KernelSupaya middleware yang baru saja dibuat bisa dikenali dan digunakan, kita perlu mendaftarkannya ke kernel. Caranya, buka file app/Http/Kernel.php dan pada properti 'role' => \App\Http\Middleware\Role::class, Sehingga properti 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. Menambah Middleware Role ke RouteSelanjutnya, kita perlu menambahkan middleware ke route. Tujuannya adalah melindungi dan membagi route apa saja yang bisa diakses oleh role tertentu. Kita bisa menggunakan route group, atau memberikan middleware ke route yang spesifik. Berikut contoh penggunaan middleware tadi untuk route group dan route individu. Silahkan buka file routes/web.php Route::middleware(['auth', 'role:operator'])->group(function () { Route::get('/operator', [OperatorController::class, 'index'])->name('operator'); //semua route dalam grup ini hanya bisa diakses oleh operator }); Route::middleware(['auth', 'role:siswa'])->group(function () { Route::get('/siswa', [SiswaController::class, 'index'])->name('siswa'); //semua route dalam grup ini hanya bisa diakses siswa }); Dalam potongan kode diatas, terdapat grup route yang hanya bisa diakses oleh operator dan grup route yang hanya bisa diakses oleh siswa. Silahkan tambahkan dan sesuaikan dengan kebutuhan. Berikut contoh untuk memberikan middleware kepada route tertentu. Route::get('/kepala-sekolah', [KepalaSekolahController::class, 'index'])->middleware(['auth', 'role:kepsek']); Selanjutnya, Anda perlu mengisi kolom |