Belajar Role-Based Access Control (RBAC) di Express.js
Membatasi Hak Akses User dengan JWT
Pada materi sebelumnya, kita sudah berhasil:
- Membuat sistem register & login
- Mengamankan password dengan bcrypt
- Menggunakan JWT sebagai bukti autentikasi
- Melindungi endpoint menggunakan middleware auth
Namun, muncul pertanyaan penting berikutnya:
Apakah semua user boleh mengakses semua fitur?
Bagaimana jika ada fitur khusus admin?
Jawabannya adalah ROLE-BASED ACCESS CONTROL (RBAC).
Konsep Dasar
1. Authentication
Menjawab pertanyaan:
Siapa kamu?
Contoh:
- Login berhasil
- Token valid
2. Authorization
Menjawab pertanyaan:
Boleh ngapain saja kamu?
Contoh:
- Admin → boleh tambah & hapus data
- User → hanya boleh lihat data
JWT = authentication
ROLE = authorization
Studi Kasus Sederhana
| Role | Hak Akses |
| ----- | ------------------ |
| admin | CRUD produk |
| user | hanya lihat produk |STEP 1 — Menambahkan Kolom role di Tabel Users
Tambahkan kolom role di database:
ALTER TABLE users ADD role VARCHAR(20) DEFAULT 'user';Penjelasan:
- Default user baru =
user - Admin bisa dibuat manual
Contoh data:
| id | username | password | role |
| -- | -------- | -------- | ----- |
| 1 | admin | hash | admin |
| 2 | budi | hash | user |STEP 2 — Update Register (Sederhana & Aman)
File /src/controller/userController.js
/src/controller/userController.jsKenapa role tidak dari input user?
Karena:
- User tidak boleh menentukan sendiri hak aksesnya
- Lebih aman
STEP 3 — Memasukkan Role ke JWT
Update fungsi login:
/src/controller/userController.js/src/controller/userController.jsPenjelasan:
JWT sekarang membawa:
- id
- username
- role
JWT menjadi identitas lengkap user
Get Muh. Alif Anhar’s stories in your inbox
Join Medium for free to get updates from this writer.
STEP 4 — Middleware Authorization (Cek Role)
Buat middleware baru:
File /src/middleware/role.js
/src/middleware/role.jsSTEP 5 — Penjelasan Middleware Role
Middleware ini bekerja setelah auth:
- Token diverifikasi
- Data user ada di
req.user - Role dicek
- Jika role tidak sesuai → ditolak
403 = Forbidden (sudah login tapi tidak punya hak)
STEP 6 — Implementasi di Routing
File /src/router/router.js
/src/router/router.jsSTEP 7 — Alur Akses Endpoint (Versi Lengkap)
Client Request
↓
Kirim JWT
↓
Auth Middleware (cek token)
↓
Role Middleware (cek role)
↓
ControllerClient mengirimkan permintaan ke server dengan menyertakan JWT sebagai “paspor digital” di dalam header pesan. Begitu permintaan tiba, ia harus melewati Auth Middleware yang bertugas memeriksa keaslian token tersebut. Jika token valid dan belum kedaluwarsa, identitas pengguna akan diakui. Setelah lolos, permintaan berlanjut ke Role Middleware untuk memastikan bahwa pengguna tersebut memiliki level akses atau jabatan yang sesuai (misalnya sebagai Admin) untuk membuka fitur yang diminta. Jika semua syarat keamanan dan hak akses terpenuhi, barulah permintaan diteruskan ke Controller, yaitu bagian inti program yang akan mengeksekusi logika bisnis, mengambil data yang diperlukan, dan memberikan jawaban akhir kembali kepada pengguna.
Jika:
- Token invalid → 401
- Token valid tapi role salah → 403
- Token valid & role sesuai → sukses
STEP 8 — Testing di Thunder Client
Login sebagai USER
- Akses GET → ✅
- POST / PUT / DELETE → ❌ 403
Login sebagai ADMIN
- Semua endpoint → ✅
Penutup Modul
Sampai tahap ini, siswa sudah mampu membangun backend profesional:
- Login aman
- JWT
- Middleware
- Hak akses user
Materi lanjutan yang sangat direkomendasikan:
- Logout (Blacklist Token)
- Refresh Token
- Soft Delete
- REST API Best Practice
- Mini Project Backend










