Pernah terpikir tidak, ketika Anda menggunakan sebuah tools development, kemudian setiap hari Anda akan menemukan hal-hal baru, yang tidak pernah Anda bayangkan sebelumnya itu bisa ditangani oleh tools tersebut?
Setiap hari Anda akan belajar sesuatu yang baru. Seolah tidak ada habisnya, ada saja ilmu baru yang bisa diungkap, dipelajari, sekaligus dipraktekkan. Fitur-fitur luar biasa, yang semakin memudahkan Web Developer untuk bekerja membangun Aplikasi Web. Hidup pun menjadi semakin menyenangkan dan semangat untuk dijalani.
Kalau saya sering, dan akhir-akhir ini semakin sering. Bukan hanya sekedar omong kosong belaka. Buktinya, Anda bisa menyaksikan sendiri di situs ini. Nyaris setiap hari ada saja tulisan baru, berisi pengalaman yang sangat menyenangkan ketika bekerja menggunakan PHPMaker, khususnya versi 2021, versi terakhir saat artikel ini saya tulis.
Tidak terkecuali dengan ilmu baru yang akan kita pelajari hari ini, yang sungguh sayang untuk dilewatkan begitu saja. Betapa mudahnya kita bisa memeriksa permission di table lain pada Aplikasi Web yang dihasilkan oleh PHPMaker 2021. Secara standar, PHPMaker hanya memeriksa permission di halaman aktif yang menggunakan suatu table tertentu.
Oke, langsung saja kita buktikan bersama-sama, bagaimana cara memeriksa permission tertentu untuk suatu table, apakah bisa diakses oleh Pengguna yang sedang login.
Katakanlah di project demo2021 yang bisa Anda download dan coba sendiri, kita ingin memeriksa permission Edit untuk user nancy (level pengguna: Sales). Apakah user ini dapat mengubah data di table orders atau tidak.
Tapi, kita akan mengeceknya saat membuka halaman List dari table models. Itu artinya, kita mengecek permission di table lain saat membuka table yang berbeda.
Nah, ternyata untuk memeriksanya, kita cukup menggunakan method allowEdit milik object Security yang sudah disediakan oleh PHPMaker 2021. Kita cukup menambahkan sedikit kode PHP ini saja ke dalam server event Page_Load di bawah List Page dari table models:
$check_permission = Security()->allowEdit("{DFB61542-7FFC-43AB-88E7-31D7F8D95066}orders"); $this->setMessage("Check Edit permission: " . $check_permission);
Penting untuk diketahui, bahwa method allowEdit tersebut memiliki satu parameter, yaitu nama table. Dalam hal ini, nama table harus dilengkapi dengan Project ID, seperti yang tersimpan di table userlevelpermissions. Anda juga bisa melihat data Project ID ini dari menu Tools -> Advanced Settings.
Untuk contoh kode di atas, maka Project ID-nya adalah {DFB61542-7FFC-43AB-88E7-31D7F8D95066}.
Setelah itu, pastikan untuk men-generate ulang semua file script seperti biasa, lalu cobalah login dengan menggunakan username nancy dan password 1234 (asumsi belum pernah diganti). Kemudian buka menu Models yang akan menampilkan halaman List dari data di table models.
Seharusnya muncul kotak pesan yang berisi tulisan Check Edit permission: 0. Itu artinya, permission Edit milik table orders untuk user nancy tidak diijinkan, karena nilainya nol.
Untuk membuktikan permission yang lain, sekarang mari kita ubah kode di atas menjadi seperti ini:
$check_permission = Security()->allowView("{DFB61542-7FFC-43AB-88E7-31D7F8D95066}orders"); $this->setMessage("Check View permission: " . $check_permission);
Kemudian akses kembali halaman List dari table models, maka seharusnya Anda akan melihat tulisan Check View permission: 32. Itu artinya, permission View yang bernilai 32 diberikan kepada user nancy untuk table orders.
Sampai di sini, kita sudah berhasil membuktikan bahwa permission Edit table orders tidak diberikan, dan permission View table orders diberikan untuk user nancy.
Berikutnya, kita coba untuk permission Add, dengan mengubah lagi kode di atas menjadi:
$check_permission = Security()->allowAdd("{DFB61542-7FFC-43AB-88E7-31D7F8D95066}orders"); $this->setMessage("Check Add permission: " . $check_permission);
Jika kita akses kembali halaman List dari menu models, maka seharusnya sekarang teks pada kotak pesan berubah menjadi: Check Add permission: 1. Itu artinya, permission Add yang bernilai 1 diberikan kepada user nancy untuk table orders.
Terbukti sudah, dengan kode di atas tadi, kita bisa memeriksa permission tertentu untuk table yang berbeda dengan table pada halaman yang sedang kita akses.
Mungkin timbul pertanyaan, darimana kita bisa mengetahui nilai dari setiap permission yang sudah kita bahas di atas tadi? Lagi-lagi, jawaban untuk pertanyaan ini pun sangatlah mudah.
PHPMaker 2021 sudah mendefinisikannya. Cukup dengan melihat kode berikut pada file config.php yang terdapat di sub-folder src:
// User level constants define(PROJECT_NAMESPACE . "ALLOW_ADD", 1); // Add define(PROJECT_NAMESPACE . "ALLOW_DELETE", 2); // Delete define(PROJECT_NAMESPACE . "ALLOW_EDIT", 4); // Edit define(PROJECT_NAMESPACE . "ALLOW_LIST", 8); // List define(PROJECT_NAMESPACE . "ALLOW_REPORT", 8); // Report define(PROJECT_NAMESPACE . "ALLOW_ADMIN", 16); // Admin define(PROJECT_NAMESPACE . "ALLOW_VIEW", 32); // View define(PROJECT_NAMESPACE . "ALLOW_SEARCH", 64); // Search define(PROJECT_NAMESPACE . "ALLOW_IMPORT", 128); // Import define(PROJECT_NAMESPACE . "ALLOW_LOOKUP", 256); // Lookup
Itu adalah nilai dari setiap konstanta permission terkait.
Jadi, jika output dari kode yang sudah kita coba sebanyak 3 kali di atas tadi tidak sama dengan nilai konstanta yang bertalian, atau jika misalnya nilai hasil pengecekan tadi adalah 0 (nol), maka itu artinya user tidak memiliki hak akses atau permission di atas untuk table yang bertalian.
Tapi sayangnya, di class AdvancedSecurity bawaan PHPMaker 2021 sampai dengan versi minor 2021.0.14, belum tersedia method lainnya yang terkait dengan pemeriksaan konstanta tadi.
Yang belum tersedia adalah method-method berikut ini:
– allowReport
– allowDelete
– allowSearch
– allowImport
Lalu solusinya bagaimana?
Keempat method yang belum tersedia di class AdvancedSecurity itu kini sudah diatasi oleh Masino Extensions untuk PHPMaker 2021. Anda bisa menggunakan keempat method ini jika menggunakan Masino Extensions untuk project PHPMaker 2021 Anda.
Jika Anda sudah terdaftar di ILovePHPMaker.com maka Anda bisa men-download ulang file Masino Extensions for PHPMaker 2021, karena hari ini saya baru saja memperbarui dan mengunggahnya ke situs tersebut.
Semoga bermanfaat ya. 🙂
Tinggalkan Balasan