Ada yang bilang: Tak kenal maka tak sayang. Lantas, kalau sudah kenal apakah menjadi semakin sayang? Hehe, jangan berpikiran negatif dulu ya. Yang saya maksud di sini adalah, jika Anda belum mengenal PHPMaker, biasanya Anda tidak akan mau; atau bahkan; tidak akan pernah menggunakan PHPMaker. Tapi coba jika Anda sudah mengenal dan semakin mendalami PHPMaker, maka perhatikan dan rasakan sendiri apa yang akan terjadi. Ahaaa! Itulah maksudnya.
Akhir-akhir ini saya semakin banyak menerima komentar pada beberapa artikel di situs saya ini. Ada yang bertanya, ada yang menyatakan kekagumannya, dan ada juga yang semakin tertarik menggunakan PHPMaker. Syukurlah kalau begitu. Berarti tujuan saya memperkenalkan PHPMaker kepada para Web Developer melalui situs ini sudah membuahkan hasil.
Saya hanya kasihan saja melihat Web Developer yang jika selama ini membangun Aplikasi Web tapi dilakukan dengan cara-cara yang kurang efektif. Menghabiskan waktu yang lama di depan komputer hanya untuk melakukan pekerjaan teknis yang sebenarnya bisa diatasi jika menggunakan tools tertentu.
Contoh, jika Anda membangun Aplikasi Web dengan cara-cara manual dan masih konvensional, seberapa besar usaha Anda untuk menangani keamanan aplikasi secara dinamis? Belum lagi dengan faktor-faktor penting lainnya yang harus Anda perhatikan.
Salah satu dari sekian banyaknya pembaca situs saya, bertanya seperti pada komentar ini. Cukup bagus pertanyaannya.
Setelah saya pikir-pikir, biarlah pertanyaan itu saya jawab melalui artikel ini. Karena yang ditanyakan itu memang selama ini jarang atau bahkan belum pernah ada yang membahasnya. Toh yang lain juga bisa sekaligus belajar bersama. Iya kan?
Jika Anda pernah membaca topik Tutorial – Advanced Security – Dynamic User Level Security melalui menu Help PHPMaker, maka seharusnya Anda sudah mengetahui bahwa PHPMaker memiliki 2 tipe keamanan Level Pengguna. Pertama disebut dengan Static User Levels, dan yang Kedua disebut dengan Dynamic User Levels.
Jika menggunakan tipe Static User Levels, maka Level Pengguna dan Hak Akses didefinisikan di dalam project dan Level Pengguna tidak untuk diubah setelah file-file script dibangkitkan oleh PHPMaker. Namanya juga statis.
Jika menggunakan tipe Dynamic User Levels, maka Level Pengguna dan Hak Akses didefinisikan di dalam 2 buah table di Database. Level Pengguna masih dapat diubah setelah file-file script dibangkitkan oleh PHPMaker. Itulah mengapa disebut dinamis.
Dua buah table yang terlibat untuk Dynamic User Levels tersebut adalah table User Levels dan User Level Permissions. Table pertama tempat kita mendefinisikan Level Pengguna. Sedangkan table kedua tempat kita mendefinisikan Permissions atau Hak Akses.
Kedua table tersebut memiliki relasi Master/Detail. Table User Levels sebagai master, dan table User Level Permissions sebagai detail-nya. Itu artinya, satu Level Pengguna dapat memiliki satu atau beberapa Hak Akses terhadap object table yang terdapat di PHPMaker.
Setelah Anda membaca topik tutorial di atas tadi, seharusnya Anda tidak akan mengalami kesulitan lagi untuk mempelajari dan memahami bagaimana cara mengimplementasikan Dynamic User Levels ke Aplikasi Web yang dihasilkan oleh PHPMaker. Mengapa? Karena pada tutorial itu sudah diuraikan dengan sangat jelas dan lengkap.
Mungkin di antara Anda selama ini ada juga yang memiliki pertanyaan yang sama dengan pembaca situs saya di atas tadi. Anda belum paham apa arti nilai yang tersimpan dalam field Permission pada table User Level Permissions tadi.
Jika Anda masih penasaran apa maksud nilai di field tersebut, maka nilai itu sebenarnya adalah hasil penjumlahan dari beberapa nilai konstanta Hak Akses yang sudah didefinisikan oleh PHPMaker dalam file ewcfg12.php (jika Anda menggunakan PHPMaker 12), yaitu:
// 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
Seperti yang Anda lihat dari kode barusan, setiap Hak Akses diwakili oleh sebuah konstanta yang memiliki nilai yang berbeda antara satu dengan lainnya. Hak Akses untuk menambah data di suatu table memiliki nilai 1 dan diwakili oleh konstanta EW_ALLOW_ADD, Hak Akses untuk menghapus data di suatu table memiliki nilai 2 dan diwakili oleh konstanta EW_ALLOW_DELETE, demikian dan seterusnya.
Jadi, jika misalnya di table User Level Permissions tadi Anda melihat nilai pada field Permissions adalah 8, maka itu artinya Hak Akses untuk table pada field TableName dan Level Pengguna pada field UserLevelID hanya bisa menampilkan data di halaman List. Hak Akses seperti untuk menambah, mengubah, menghapus, mencari, dan seterusnya tidak diberikan untuk Level Pengguna tersebut.
Mari kita lihat contoh lainnya. Jika nilai di field Permissions tadi adalah 104 untuk suatu table, maka itu artinya Level Pengguna itu hanya dapat menampilkan record pada halaman List yaitu EW_ALLOW_LIST = 8, dapat menampilkan satu record per halaman yaitu EW_ALLOW_VIEW = 32, dan dapat mencari data melalui Pencarian Lanjutan yaitu EW_ALLOW_SEARCH = 64. Hasil penjumlahan ketiganya adalah 104 (8 + 32 + 64).
Oke, mungkin di antara Anda ada yang bertanya lagi seperti ini. Dari definisi konstanta di atas tadi, mengapa ada kondisi seperti di bawah ini:
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 }
Nah, itu artinya, jika konstanta EW_USER_LEVEL_COMPAT sebelumnya didefinisikan, maka Hak Akses View dan Search masing-masing bernilai 8. Sebaliknya, jika konstanta EW_USER_LEVEL_COMPAT itu tidak didefinisikan, maka Hak Akses View dan Search masing-masing bernilai 32 dan 64, seperti contoh di atas tadi.
Dengan kata lain, kondisi di blok else di atas itu akan dieksekusi oleh sistem, jika pilihan pengaturan Separate permissions for List/View/Search yang terdapat pada menu Tools -> Advanced Settings dalam keadaan aktif (enabled). Sampai di sini sudah paham maksud dari arti pendefinisian konstanta EW_USER_LEVEL_COMPAT di atas, ‘kan?
Kesimpulannya, nilai pada field Permissions adalah nilai hasil penjumlahan Hak Akses (Permissions) mana saja yang didefinisikan oleh user Super Admin terhadap suatu table untuk Level Pengguna tertentu. Tentu, Anda tidak perlu pusing memikirkan bagaimana cara mengekstrak kembali nilai ini sehingga sistem bisa mengenali Hak Akses apa saja yang diberikan untuk Table dan Level Pengguna tertentu.
Biarkan PHPMaker yang menanganinya untuk Anda. Di situlah smart dan pintarnya PHPMaker. Sebagai Web Developer, Anda hanya cukup perlu berkonsentrasi untuk menerapkan proses bisnis ke dalam Aplikasi Web yang dihasilkan oleh PHPMaker itu. Selebihnya untuk urusan teknis yang sering digunakan di Aplikasi Web, serahkan saja ke PHPMaker!
Nah, supaya nilai pada field Permissions tadi bisa disimpan ke Database, tentu saja harus dilakukan dari halaman userpriv.php pada Aplikasi Web yang sudah dibangkitkan oleh PHPMaker. Jadi, bukan dilakukan dari dalam project PHPMaker, seperti yang Anda lakukan jika menggunakan tipe Static User Levels.
Dan jangan sekali-kali melakukannya secara manual dengan menambahkan atau mengubah langsung nilai tersebut ke Database. Karena jika Anda salah menentukan nilainya, maka bisa menyebabkan salahnya Hak Akses yang diberikan untuk Level Pengguna dan Table terkait.
Jadi, sekali lagi… mengapa disebut dengan Dynamic User Levels? Karena Level Pengguna ini bisa didefinisikan atau diubah secara dinamis melalui antar muka Aplikasi Web yang sudah dihasilkan oleh PHPMaker.
Bagaimana? PHPMaker benar-benar keren habis, ‘kan? Hehehe… 🙂
karas candra mengatakan
Mas, q baru di dunia design web, akhir-akhir ini yg aku pelajari tentang yii2 advanced, itu pun belum keseleruhan bisa menguasai, tapi setelah beberapa artikel di blog ini saya baca, saya merasa ada sesuatu yang baru dalam design web, dan itu mengarah ke rancangan yang lebih mudah dan tetap efisie, saya berterimakasih sekali atas informasinya, dan ada pertannya di hati yg mengganjal karna saya rasa saya mulai tertarik dengan PHP Maker dan PHP Report Maker, nah yg mau saya tanyakan :
1. Aplikasi apa saja yg harus saya persiapkan (syukur-syukur kalau di kasih link) hehehe
2. Untuk tutorial, adakah rujukan yg bisa saya pelajari terlebih dahulu?
terimkasih sebelumnya 😀
Masino Sinaga mengatakan
1. Yang jelas ya aplikasi PHPMaker itu sendiri, hehehe… Silahkan download dari website resmi PHPMaker.
2. Tutorial dan rujukan bisa Anda baca dan pelajari dari menu Help di dalam aplikasi PHPMaker.
Sama-sama, dan selamat belajar.
CotezSka mengatakan
phpmaker bisa membuat software gis tidak pak? 🙂
Masino Sinaga mengatakan
Bisa.
faisal mengatakan
maaf pak…kalo php maker bisa buat online shop gak..??
Masino Sinaga mengatakan
Bisa. Gunakan fitur Custom Files. Selamat mencoba. 🙂
Meidy N Surawinata mengatakan
DH,
Pak kalo bedanya MASINO Extension dan MASINO Template itu apa pak ?
Terima kasih.
Salam,
Meidy
Masino Sinaga mengatakan
Bedanya, lihat di sini: Masino Template for PHPMaker.
aries djp mengatakan
pak masino ini satu tim sm pak yuyus ga ya? 😀
Masino Sinaga mengatakan
Lho, kok tahu? 😛
Mr Koleh mengatakan
Saya punya PHPmaker berkat bantuan Pak Masino dan masih tahap eksperimen, ada pertanyaan bagaimana menerapkan “Granting permission to individual fields” dalam “dymanic selection” di PHPmaker. Misalnya Propinsi A terdiri dari Kab a,b,c, Kab a terdiri dari kecamatan 1,2,3 dan Propinsi B terdiri dari Kab e,f,g, Kab e terdiri dari kecamatan 4,5,6. Apabila user dengan level tertentu hanya bisa mengakses Propinsi A, Kab a, Kec 1, Apakah PHPmaker bisa menanganinya? Trims
Masino Sinaga mengatakan
Bisa. Gunakan server event Recordset_Selecting dan server event Lookup_Selecting.
Baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk info dan contoh lebih lanjut.
Aditya mengatakan
Pak Masino, saya mau tanya, untuk keamanan script (source code) php maker itu sendiri gimana ya pak ?
karena kalau kita liat di view frame source itu mudah sekali terlihat link link active yang ada di aplikasi kita, kadang dilink-link tersebut terdapat id yang merupakan key didatabase kita.
Terimakasih sebelumnya
Masino Sinaga mengatakan
Trus, kalau kelihatan memangnya kenapa?
Bayu mengatakan
Bang Masino,
Semoga selalu sehat.
Saya menambah custom menu dengan menuju URL tertentu.
Mengapa menu ini tidak muncul di option Security ya?
Hal ini berakibat semua users bisa mengaksesnya.
Di property mana harus saya tambah?
Terima kasih.
Masino Sinaga mengatakan
Menu yang tidak terkait dengan object di database pada project PHPMaker memang tidak akan muncul di option Security.
Solusinya, Anda bisa menggunakan server event MenuItem_Adding untuk menyembunyikan atau menampilkan menu tadi sesuai dengan user level tertentu.
Lihat topik Server Events and Client Scripts dari menu Help PHPMaker untuk info and contoh kode lebih lanjut.
Haryo mengatakan
saya pengguna baru phpmaker2021. saya sedang mencoba setting halaman login dgn pilihan dynamic userlevel, tetapi ada kendala saat saya register dari halaman login maupun saat menambah user sebagai admin.
Muncul message : “An internal error has occurred while processing your request”
Saya menggunakan server local “WAMP”. Mohon petunjuknya? terimakasih
Masino Sinaga mengatakan
Untuk melihat detail dari pesan error tersebut, coba ikuti artikel ini: Cara Mengetahui Detail Error di Aplikasi Web yang Dihasilkan oleh PHPMaker 2021
Plaza kasir mengatakan
Saya baru mengenal PHPMaker dari web ini, saya akan mulai langkah awal, terimakasih
Masino Sinaga mengatakan
Sama-sama.
Agus mengatakan
Bagaimana membuat hyperlink yg bisa diakses secara umum, berupa tampilan 1 halaman yg berisi data.? Terimakasih pak
Masino Sinaga mengatakan
Hyperlink yang bisa diakses secara umum? Maksudnya link di bagian menu atau sidebar atau navbar, yang bisa diakses/dilihat oleh user Guest atau tanpa harus login terlebih dulu ya? Apakah seperti itu yang dimaksud?
Charly mengatakan
Hallo Pak Masino.
Pak Masino ada referensi tutorial dari Pak Masino untuk mengatur UserLevel untuk meng-edit salah satu Field saja pada table yang diinginka? Makasih Pak Masino
Masino Sinaga mengatakan
Halo Charly. Maksudnya bagaimana ya? Salah satu field itu contoh kasusnya bagaimana?
Charly mengatakan
Contoh saya punya table data_pencairan yang terdiri dari beberapa Field misalkan :
IdPencairan
KodePencairan
UraianPencairan
JumlahPencairan
StatusPencairan
Kemudian saya buat userlevel misalkan operator dan verifikasi, setelah data diinput di table data_pencairan oleh Operator secara default StatusPencairan bernilai “Draft”, nanti pada saat Verifikator yang login dia akan mengganti StatusPencairan menjadi “SudahDiperiksa”, tetapi pada saat tabel data_pencairan di edit oleh Verifikator, hanya Field StatusPencairan yang bisa di edit, field yang lain Read Only.
Mohon pentunjuk Pak Masino…Makasih
Masino Sinaga mengatakan
Ooh, seperti itu toh maksudnya, ya ya ya… 😉
PHPMaker tentu saja bisa mensolusikannya dengan sangat mudah.
Cukup aktifkan saja pilihan Read Only dari Fields setup -> Edit Page, kecuali field StatusPencairan, supaya tetap bisa dipilih datanya.
Setelah itu, generate ulang semua file script seperti biasa.
Charly mengatakan
Makasih Pak Masino, atas bantuannya…
Tapi Pak Masino, seandainya kalau Operator login kembali untuk meng-edit/memperbaiki data yang diinput, field-nya masih Read Only. Gimana caranya agar pada saat User Level Oprator yang login semua field-nya tidak Read Only, dan hanya Userl Level Verifikator yang berlaku Field Read Only nya. Makasih Pak Masino
Masino Sinaga mengatakan
Untuk user level Operator, bisa dibuatkan Database View berdasarkan table tadi. Jadi, user tetap dapat mengubah data menggunakan object Database View di PHPMaker tadi, terpisah dengan table yang digunakan khusus untuk user level Verifikator.
Charly mengatakan
Makasih Pak Masino…sudah berhasil…
Masino Sinaga mengatakan
Sama-sama.