Ada satu bug yang tidak selalu kelihatan di layar, tapi dampaknya bisa sangat besar: user melihat sesuatu yang seharusnya tidak mereka lihat. Bukan error 500, bukan halaman putih. Justru sebaliknya—semuanya terlihat normal, tapi salah orang, salah akses.
Saya pernah mengalami ini di sebuah aplikasi web internal. Seorang user biasa tanpa sengaja bisa mengakses endpoint admin. Tidak merusak data, tapi cukup untuk membuat semua orang panik. Dari situ saya belajar, dalam website development, sistem role dan permission bukan fitur tambahan. Ia adalah pagar pembatas yang menentukan siapa boleh melakukan apa.
Artikel ini akan membahas cara mengelola role dan permission user di aplikasi web multi-user secara bertahap, dengan pendekatan praktis dan aman, seperti yang benar-benar dipakai di proyek nyata.
Memahami Perbedaan Role dan Permission
Sebelum masuk ke teknis, kita perlu meluruskan konsep dasarnya.
Role
Role adalah kumpulan tanggung jawab atau posisi user.
Contoh umum:
-
User
-
Admin
-
Editor
-
Manager
Role memberi gambaran besar tentang siapa user tersebut di dalam sistem.
Permission
Permission adalah izin spesifik yang menentukan aksi apa yang boleh dilakukan.
Contoh:
-
Create product
-
Edit product
-
Delete user
-
View report
Dalam website development, role tanpa permission terlalu kasar, permission tanpa role terlalu rumit. Keduanya perlu berjalan bersama.
Kenapa Role & Permission Penting di Aplikasi Multi-User
Begitu aplikasi punya lebih dari satu jenis user, kompleksitas langsung naik.
Tanpa sistem role dan permission yang jelas:
-
Akses sulit dikontrol
-
Bug keamanan mudah muncul
-
Penambahan fitur jadi berisiko
Website development yang matang selalu memikirkan akses sejak awal, bukan setelah masalah muncul.
Pendekatan Umum Mengelola Akses User
Ada beberapa pendekatan yang sering dipakai.
Role-Based Access Control (RBAC)
Pendekatan paling umum dan paling mudah dipahami.
-
User → punya role
-
Role → punya permission
RBAC cocok untuk sebagian besar aplikasi web, dari e-commerce sampai dashboard internal.
Permission-Based (Fine-Grained)
User langsung diberi permission tanpa role tetap.
Pendekatan ini fleksibel, tapi lebih kompleks. Biasanya dipakai di aplikasi besar atau SaaS.
Dalam banyak kasus website development, RBAC sudah lebih dari cukup.
Menentukan Role Sejak Awal (Jangan Terlalu Banyak)
Kesalahan umum adalah membuat terlalu banyak role.
Mulailah dari yang paling dasar:
-
User
-
Admin
Kalau perlu, baru tambah:
-
Editor
-
Moderator
-
Manager
Role bisa bertambah, tapi mengurangi role yang sudah dipakai jauh lebih sulit.
Mendesain Struktur Data Role & Permission
Di sinilah pondasi teknis dibangun.
Biasanya struktur datanya melibatkan:
-
Tabel user
-
Tabel role
-
Tabel permission
-
Relasi role–permission
Pendekatan ini membuat sistem lebih fleksibel dan mudah dikembangkan.
Dalam website development, struktur data yang rapi akan menyelamatkan banyak waktu di masa depan.
Autentikasi vs Otorisasi: Jangan Tertukar
Dua istilah ini sering disamakan, padahal berbeda.
-
Autentikasi: siapa user-nya
-
Otorisasi: apa yang boleh dilakukan
Login hanya memastikan identitas. Role dan permission menentukan akses.
Website development yang aman selalu memisahkan keduanya dengan jelas.
Implementasi Role & Permission di Back-end
Back-end adalah penjaga utama akses.
Beberapa praktik penting:
-
Cek role di setiap endpoint sensitif
-
Jangan percaya data dari front-end
-
Gunakan middleware untuk validasi
Middleware sangat membantu agar pengecekan akses tidak berulang di setiap controller.
Pendekatan ini membuat website development lebih bersih dan konsisten.
Mengelola Akses di Front-end (Sebagai Lapisan Tambahan)
Front-end bukan sumber keamanan utama, tapi tetap penting untuk UX.
Beberapa contoh penggunaan:
-
Sembunyikan menu admin
-
Nonaktifkan tombol tertentu
-
Tampilkan pesan “tidak punya akses”
Ini membantu user memahami batasannya tanpa harus bertabrakan dengan error.
Permission Berbasis Fitur, Bukan Halaman
Kesalahan desain yang sering terjadi adalah permission berbasis halaman.
Lebih baik gunakan permission berbasis aksi:
-
Boleh edit produk
-
Boleh hapus order
-
Boleh lihat laporan
Dengan cara ini, satu halaman bisa dipakai banyak role dengan perilaku berbeda.
Dalam website development, pendekatan ini jauh lebih fleksibel.
Role Dinamis vs Role Tetap
Untuk aplikasi sederhana, role tetap sudah cukup.
Tapi untuk aplikasi yang tumbuh:
-
Role bisa dikustom per organisasi
-
Permission bisa diaktifkan atau dimatikan
Pendekatan ini umum di aplikasi SaaS multi-tenant dan sangat membantu saat kebutuhan user mulai beragam.
Logging dan Audit Akses User
Ini sering dilupakan.
Beberapa hal yang layak dicatat:
-
Siapa mengubah data penting
-
Kapan role user diubah
-
Akses sensitif yang dilakukan
Dalam website development profesional, audit log sering jadi penyelamat saat terjadi masalah.
Testing Role & Permission Secara Menyeluruh
Testing akses tidak bisa setengah-setengah.
Coba:
-
Login sebagai role berbeda
-
Akses endpoint secara langsung
-
Manipulasi request dari client
-
Uji kondisi ekstrem
Bug permission sering tersembunyi karena jarang diuji.
Kesalahan Umum yang Perlu Dihindari
Beberapa jebakan klasik:
-
Mengecek role hanya di front-end
-
Hardcode role di banyak tempat
-
Permission tidak terdokumentasi
-
Tidak ada default deny
Dalam website development, kesalahan kecil di akses bisa berdampak besar.
Pelajaran dari Pengalaman Nyata
Setelah beberapa kali membangun aplikasi multi-user, saya sampai pada satu kesimpulan sederhana: user akan selalu mencoba hal yang tidak kita duga.
Bukan karena jahat, tapi karena penasaran atau tidak sengaja.
Sistem role dan permission yang baik bukan untuk membatasi secara berlebihan, tapi untuk menjaga keteraturan. Ia bekerja diam-diam, jarang terlihat, tapi sangat menentukan stabilitas aplikasi.
Website development yang matang bukan cuma tentang fitur yang bisa dipakai, tapi juga tentang fitur yang tidak bisa dipakai oleh orang yang salah. Dan ketika sistem akses berjalan rapi tanpa drama, di situlah fondasi aplikasi benar-benar terasa kuat.