Optimalkan Keamanan Aplikasi Anda: Panduan Lengkap Implementasi Autentikasi Basis Data dan Pengelolaan Peran Pengguna di Laravel

Annisa Puspa Kirana
3 min readOct 26, 2023

Untuk mengimplementasikan autentikasi dengan basis data dan peran (roles) pengguna yang berbeda, Anda perlu menyesuaikan sistem autentikasi Laravel standar dengan menambahkan pengelolaan peran pengguna dan memastikan bahwa informasi peran disimpan dalam basis data. Berikut adalah langkah-langkah umum untuk mencapai hal ini:

Langkah 1: Tambahkan Kolom Peran pada Tabel Pengguna

Tambahkan kolom role pada tabel pengguna untuk menyimpan informasi peran pengguna. Gunakan migration untuk menambahkan kolom ini ke tabel pengguna:

php artisan make:migration add_role_to_users_table --table=users

Edit file migrasi yang baru dibuat (database/migrations/timestamp_add_role_to_users_table.php) untuk menambahkan kolom role:

public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('role')->default('user'); // 'user' adalah peran default
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('role');
});
}

Jalankan migrasi untuk menerapkan perubahan ke basis data:

php artisan migrate

Langkah 2: Tentukan Logika Peran Pengguna

Tambahkan logika bisnis untuk peran pengguna di dalam model User. Ini dapat mencakup metode untuk memeriksa dan mengatur peran pengguna.

class User extends Authenticatable
{
// ...
    public function isAdmin()
{
return $this->role === 'admin';
}
public function isUser()
{
return $this->role === 'user';
}
}

Langkah 3: Tambahkan Middleware untuk Menyaring Akses

Buat middleware untuk memeriksa peran pengguna sebelum memberi akses ke halaman tertentu. Buat middleware dengan menggunakan perintah:

bashCopy code
php artisan make:middleware CheckRole

Edit metode handle di dalam middleware CheckRole untuk memeriksa peran pengguna:

public function handle(Request $request, Closure $next, $role)
{
if (!auth()->user()->isAdmin()) {
abort(403, 'Unauthorized action.');
}
    return $next($request);
}

Langkah 4: Terapkan Middleware pada Rute

Terapkan middleware yang baru dibuat pada rute yang hanya boleh diakses oleh pengguna dengan peran tertentu. Misalnya, pada file web.php, Anda dapat menambahkan middleware CheckRole untuk rute dashboard admin:

use App\Http\Middleware\CheckRole;
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', function () {
return view('dashboard');
})->name('dashboard');
Route::middleware([CheckRole::class . ':admin'])->group(function () {
// Rute yang hanya dapat diakses oleh pengguna dengan peran 'admin'
// ...
});
});

Sekarang, pengguna dengan peran ‘admin’ akan diizinkan mengakses rute-rute yang diatur dalam middleware CheckRole. Pastikan untuk menyesuaikan peran dan logika akses sesuai dengan kebutuhan aplikasi Anda.

berikut adalah contoh struktur tabel untuk basis data pengguna dengan penambahan kolom peran (role):

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'user') DEFAULT 'user'
);

Dalam contoh di atas:

  • id: Kunci utama (Primary Key) yang secara otomatis bertambah nilai.
  • name: Nama pengguna.
  • email: Alamat email pengguna.
  • password: Kata sandi pengguna (harus di-hash sebelum disimpan dalam basis data).
  • role: Kolom ENUM yang menentukan peran pengguna. Nilai dapat berupa 'admin' atau 'user' dan secara default diatur sebagai 'user'.

Pastikan Anda menggunakan migrasi atau metode lain yang sesuai dengan Laravel untuk membuat tabel ini di basis data Anda sehingga struktur tabel dapat dikelola dengan mudah melalui skrip migrasi. Dengan menggunakan migrasi, Anda dapat mengelola perubahan struktur tabel dengan aman dan terorganisir.

Dengan langkah-langkah di atas, Anda dapat mengimplementasikan autentikasi dengan basis data dan mengelola peran pengguna secara efektif dalam aplikasi Laravel Anda.

© AP Kirana

--

--

Annisa Puspa Kirana
Annisa Puspa Kirana

Written by Annisa Puspa Kirana

Passionate about IT! I demystify tech complexities with words. Join me on this innovative journey! 🚀✨

No responses yet