PHPMaker sudah menyediakan fitur Security yang begitu lengkap dan demikian hebatnya di Aplikasi Web yang dibuat olehnya. Di antaranya menerapkan konsep RBAC (Role Based Access Control) untuk memudahkan Web Developer mengelola pembagian Hak Akses berdasarkan Peran yang dimiliki oleh setiap Pengguna. RBAC sudah sering digunakan di aplikasi untuk menangani hak akses Pengguna, entah itu yang berbasis web maupun desktop.
Sekedar untuk menyegarkan ingatan kembali, RBAC memisahkan konsep Pengguna, Peran, dan Hak Akses. Ketiganya didefinisikan secara terpisah; sebagai tiga buah entitas atau object di dalam sistem aplikasi. Sekalipun dipisah, mereka memiliki kaitan yang sangat erat. Setiap Pengguna memiliki Peran tertentu. Kemudian setiap Peran memiliki kumpulan dari beberapa Hak Akses (seperti: Tambah, Ubah, Hapus, Cari, Export Data, Tampilan, dsb). Ketiganya bisa didefinisikan secara dinamis dari dalam Aplikasi Web, maupun secara statis dari dalam aplikasi PHPMaker.
Sekedar informasi, istilah Peran di RBAC sama dengan istilah User Level di Aplikasi Web yang dibangkitkan oleh PHPMaker. Jadi, jika Anda menemukan istilah User Level di artikel ini, maka itu sama artinya dengan konsep Peran di RBAC.
Karena adanya kebutuhan di Aplikasi Web yang cenderung relatif berubah, maka sangat disarankan untuk menggunakan pendefinisian RBAC secara dinamis. Pengertian dinamis di sini artinya bisa ditentukan saat Aplikasi Web dijalankan oleh Pengguna level Administrator. Web Developer cenderung memilih metode ini dibandingkan metode statis, karena sewaktu-waktu dapat diubah dan hasilnya tersimpan di database.
Tapi, bukan berarti setelah menggunakan metode yang dinamis ini, kita hanya bisa menggunakan pendefinisian Hak Akses yang sudah tersimpan di database. Kadang-kadang, kita membutuhkan business-logic tertentu yang ingin menambahkan atau bahkan menghapus Hak Akses yang dimiliki oleh Pengguna melalui Peran tertentu. Misalnya, untuk Pengguna dengan Peran atau User Level tertentu yang sebelumnya sudah ditentukan secara dinamis, kita ingin menambahkan lagi Hak Akses lainnya sesuai dengan kebutuhan.
Supaya lebih jelas, mari kita simak contoh berikut. Katakanlah Pengguna nancy memiliki User Level Sales di Aplikasi Web yang Anda bangun. Sebelumnya sudah didefinisikan dari dalam Aplikasi Web tersebut, bahwa Peran atau User Level Sales hanya diijinkan bisa melihat data di menu Categories. Artinya: Peran ini tidak dapat menambah, mengubah, bahkan menghapus data di menu Categories tadi. Belakangan, ada kebutuhan yang membolehkan semua Pengguna di peran Sales untuk menambah dan mengubah data. Pertanyaannya adalah: bagaimana cara menambahkan Hak Akses Tambah dan Edit data tersebut tanpa harus mengubah pendefinisian Hak Akses yang sudah disimpan di database dan terdapat di Peran tadi?
PHPMaker dapat mengatasi hal ini dengan sangat mudah dan cepat. PHPMaker sudah menyediakan sebuah server event yang bernama UserLevel_Loaded, yang dapat Anda akses dari lokasi: Server Events -> Global -> All Pages di project PHPMaker Anda. Seperti namanya, server event ini dieksekusi setelah Pengguna berhasil Login ke Aplikasi Web dan setelah User Level dimuat oleh sistem. Di server event ini Anda sebagai Web Developer dapat mengubah atau menambahkan Hak Akses untuk User Level tertentu. Perlu diingat, bahwa server event ini merupakan member dari Class Security. Artinya, Anda dapat mengakses member lainnya secara langsung di class tersebut (jika dibutuhkan).
Sekarang mari kita simak contoh kode di bawah ini supaya semakin jelas lagi.
function UserLevel_Loaded() { $this->AddUserPermission("Sales", "categories", EW_ALLOW_ADD); // tambahkan Hak Akses Tambah (Add) $this->AddUserPermission("Sales", "categories", EW_ALLOW_EDIT); // tambahkan Hak Akses Ubah (Edit) }
Dari kode tersebut, kita sebagai Web Developer dapat menambahkan dua Hak Akses baru yaitu masing-masing Add dan Edit untuk menu/tabel categories dan hanya untuk Peran Sales, menggunakan method AddUserPermission yang merupakan member dari class Security di Aplikasi Web yang dibangkitkan oleh PHPMaker. Karena server event ini merupakan member dari class Security, Anda dapat menggunakan konteks $this di dalamnya.
Method AddUserPermission berfungsi untuk menambahkan Hak Akses tertentu untuk User Level (Peran) tertentu dan pada menu/Table tertentu. Method ini memiliki 3 parameter. Yang pertama adalah nama Peran, yang kedua adalah nama Table, dan yang ketiga adalah konstanta dari Hak Akses-nya.
Tentu Anda bertanya, bagaimana cara mengetahui konstanta Hak Akses tersebut? Jangan khawatir. Untuk mengetahui data konstanta Hak Akses selengkapnya, Anda cukup melihatnya dari file ewcfg10.php (untuk PHPMaker versi 10). Lihat kode seperti ini di file tersebut:
// User level constants define("EW_ALLOW_ADD", 1, TRUE); // Add define("EW_ALLOW_DELETE", 2, TRUE); // Delete define("EW_ALLOW_EDIT", 4, TRUE); // Edit @define("EW_ALLOW_LIST", 8, TRUE); // List if (defined("EW_USER_LEVEL_COMPAT")) { define("EW_ALLOW_VIEW", 8, TRUE); // View define("EW_ALLOW_SEARCH", 8, TRUE); // Search } else { define("EW_ALLOW_VIEW", 32, TRUE); // View define("EW_ALLOW_SEARCH", 64, TRUE); // Search } @define("EW_ALLOW_REPORT", 8, TRUE); // Report @define("EW_ALLOW_ADMIN", 16, TRUE); // Admin
Selain untuk menambahkan Hak Akses, server event UserLevel_Loaded juga dapat menghapus Hak Akses tertentu, menggunakan method yang bernama DeleteUserPermission. Parameter-nya sama dengan parameter yang terdapat di method AddUserPermission.
Tapi perlu diingat juga, bahwa jika Hak Akses yang ingin Anda hapus menggunakan DeleteUserPermission tadi sudah didefinisikan secara statis sebelumnya dari dalam project PHPMaker melalui menu tab Security -> Use Existing Table -> Advanced -> User Levels -> Sales (dalam contoh di atas) -> Static User Levels, maka Hak Akses tersebut tidak bisa dihapus.
Contoh, kode di bawah ini tidak akan berfungsi jika Hak Akses untuk menampilkan halaman List sudah didefinisikan sebelumnya dari dalam project PHPMaker secara statis:
function UserLevel_Loaded() { $this->DeleteUserPermission("Sales", "categories", EW_ALLOW_LIST); // <-- ini tidak berfungsi jika sudah pernah didefinisikan secara statis dari dalam project PHPMaker }
Oleh karena itu, pastikan sekali lagi Anda tidak mendefinisikan Hak Akses tersebut secara statis jika Anda memiliki kebutuhan untuk menghapusnya menggunakan server event UserLevel_Loaded saat Aplikasi Web dijalankan.
Dengan menggunakan server event UserLevel_Loaded, maka Anda dapat memanipulasi (menambah dan menghapus) Hak Akses yang dimiliki oleh Peran (User Level di PHPMaker) tertentu. Itu artinya, Hak Akses yang ditambah atau dihapus melalui server event tadi akan secara otomatis berpengaruh langsung kepada semua Pengguna yang memiliki Peran tersebut.
Lagi-lagi, betapa mudahnya PHPMaker dapat membantu Web Developer dalam mengelola Hak Akses untuk User Level tertentu secara dinamis sesuai dengan business-logic maupun business-process di Aplikasi Web Anda. 🙂
Bang Masino, saya mau tanya kenapa User (selain Administrator) hanya bisa melihat Data User (Tabel User) untuk Record nya sendiri, padahal saya memerlukan semua User dapat mengakses/ melihat data User Lainnya (tapi hanya bisa Update Profile nya sendiri).
Hal ini diperlukan karena Data di Tabel User adalah Data Karyawan (Pengguna Aplikasi) di Aplikasi Tersebut.
apakah hal ini bisa di ubah ?
Kalau ditanya kenapa, jawabannya untuk alasan keamanan data di table user itu sendiri. Secara standar, user A tidak boleh melihat apalagi mengubah data user-user lainnya.
Solusinya, cukup buat Database View berdasarkan table user tadi, lalu gunakan Database View tadi untuk mengijinkan user A mengakses/melihat data user lainnya.
selama malam pak masino, saya lgi membuat app pendaftran beasiswa, disini saya ingin user(mahasiswa) hanya melihat datanya saja ketika sudah melakukan pendaftaran . saya mempunyai tb_user dan tb_mahasiswa struktur tabel : https://drive.google.com/open?id=1jDxPQm5lUcDJGmGJPk-hKWeIn74OiUOD
Oke, semoga sukses ya.
bisa di contohkan di penerapannya coding ya?
Penerapan coding-nya bisa Anda lihat di server event UserLevel_Loaded seperti yang sudah dijelaskan di atas.
Bagaimana cara menerapkan golongan user 1 bisa akses semua menu, golongan user 2 bisa akses menu A, golongan user 3 bisa akses menu B, golongan user 4 bisa akses menu C ? Ada tabel pengguna terdiri dari id, nama,password, hak. Hak diisi golongan user , apakah 1,2,3,4. Saat login jika user tersebut hak berisi 2 maka hanya akses menu A. Terima kasih.
Bisa menggunakan fitur Dynamic User Level Security.
Selengkapnya bisa dilihat dari topik Tutorial – Advanced Security – Dynamic User Level Security melalui menu Help PHPMaker.