Mapping Hak Akses User Pada MenuStrip Sampai Control Button

VB - Windows Control , Posted at : Aug/14/2007   [Click this link to download code sample]
5531 Views   9 Comments

Di artikel sebelumnya saya telah menjelaskan bagaimana caranya membuat custom role pada windows application yang pada akhirnya role tersebut di mapping ke menustrip control untuk membatasi hak akses user pada menu tertentu. Lalu bagaimana caranya kalau kita ingin membatasi hak akses user sampai ke control button yang ada pada form? Misalnya untuk role operator hanya bisa menggunakan button simpan dan batal tanpa bisa menggunakan button update dan delete, sebaliknya untuk role admin bisa melakukan semuanya.

Kasus ini saya dapatkan ketika saya mengerjakan sebuah project dimana user requirementnya ingin agar aplikasi tersebut bisa membatasi hak akses sampai ke button yang ada pada form. Awalnya saya sempat bingung bagaimana caranya...sampai pada akhirnya terpikir untuk menggunakan System.Reflection namespace. Namespace tersebut digunakan untuk mendapatkan informasi form-form apa saja yang terdapat di dalam project tersebut. Kemudian setelah mendapatkan informasi tersebut kita dapat melakukan instantiasi form secara runtime dari type yang didapat untuk mendapatkan button-button yang terdapat didalam form tersebut.

Mengenai code nya saya tidak akan bahas karena cukup panjang :) anda bisa download saja source code nya. Disini saya akan terangkan garis besarnya saja.

Pertama, buat tabel dengan relasi seperti gambar dibawah ini :

Tabel RoleDetails berisi data rinci tentang hak akses untuk role tertentu. Biar lebih jelas kita lihat contoh record tabel RoleDetails seperti gambar dibawah ini :

Kolom MenuName di tabel RoleDetails berisi nama nama menu yang diambil dari property Tag MenuStrip di Form Parent beserta nama-nama button pada form yang diambil dari property Text button control. Kenapa saya menggunakan property Tag di MenuStrip? Kenapa ga diambil dari property Text saja? Penggunaan property Tag sebagai solusi kalau MenuStrip yang digunakan berisi teks yang dapat diakses sebagai shortcut key (with ampersand symbol). Jadi kita tidak ingin menampilkan menu yang memiliki simbol tersebut, oleh karena itu saya gunakan property Tag.

Kolom FormAction berisi data-data berupa nama-nama Form yang memberikan petunjuk dimana letak button-button yang ada di kolom MenuName berada.

Kolom Tag berisi data yang menunjukkan apakah MenuStrip yang terdapat di kolom MenuName tersebut berupa menu header (tag:="menu") atau menu yang memanggil form (tag:="menuform"), atau hanya berupa button yang terdapat didalam form (tag:="action"). Tag "menu" dan tag "menuform" diambil dari property AccessibleName MenuStrip yang bersangkutan. Jadi kita harus memberikan value ke property AccessibleName untuk memberitahukan apakah menu tersebut hanya berupa header menu (tag:="menu") atau menu yang akan memanggil form (tag:="menuform"). Sedangkan tag "action" di set secara runtime untuk menunjukkan bahwa tag tersebut berupa control button.

Ada syarat yang saya gunakan untuk pemberian property Tag pada MenuStrip, yaitu untuk MenuStrip yang akan memanggil sebuah form, value yang digunakan pada property Tag yaitu berupa nama form yang akan dipanggil. Hal ini digunakan untuk create instance secara runtime dengan menggunakan Reflection yang akan mapping control button yang terdapat didalamnya. Property Tag dari Form juga harus diset dengan nama form yang bersangkutan.

Sekarang mari kita lihat contoh record yang terdapat didalam tabel FormActions pada gambar dibawah ini :

Kolom FormName yang terdapat di tabel FormActions berisi data mengenai nama-nama form yang terdapat di dalam aplikasi tersebut. Kolom Act1, Act2, ...Actn merupakan kolom yang berisi data mengenai nama-nama control button yang terdapat di dalam form tersebut. Kolom Actn diambil dari property Text button. Data data yang terdapat di tabel RoleDetails dan tabel FormActions ini digunakan untuk mapping ke control TreeView. Secara default saya tambahkan data pada kelima tabel diatas untuk role Adm1 ketika program pertama kali dijalankan. Anda tinggal buat form yang digunakan untuk manage user, role, dan employees.

Code untuk aplikasi ini butuh sedikit teknik yang harus dilakukan di form login (Load event) untuk menjaga Data Integrity yaitu dengan menggunakan Transaction. Disini saya tidak menggunakan Transaction karena waktu itu dikejar deadline project :) Anda bisa improve code yang digunakan...hasil akhirnya akan tampak seperti gambar dibawah ini :

 

 

 

 


[Comments]
Hery  Oct/09/2007 02:18:31 :
Ok, good articles
andri  Oct/09/2007 07:42:46 :

mau dicoba dulu ya...

firman  Oct/11/2007 06:34:23 :
Priyo  Apr/27/2009 04:50:22 :
Mas Rully........ boleh di tambah conto coding nya gak ? khususnya untuk Tree View control. Belum pernah menggunakan control ini, apali membayangkan submited dari control ke database. Thanks
Apriandi Kusnadi  May/29/2009 07:42:13 :
Mas, kalo seandainya di dalam Menu Strip ada Tool Strip Button nya. gimana tuh codingnya?. jadi ada Menu Form1, trus ada juga ToolStrip Button untuk Access Form1. jadi kalo seandainya Form1 nya Disabled, ToolStripButtonnya juga harus disabled. Thanks
software development  Aug/28/2009 09:10:09 :
Cool, excelent but nHibernate is till cooler Thanks for bringing this up
software development  Aug/28/2009 09:11:59 :
Cool, excelent but nHibernate is till cooler Thanks for bringing this up
diggy.zac  Nov/10/2010 02:31:20 :

kereenn mas Yulian..

(terimakasih mau berbagi ilmu)

Rully  Nov/11/2010 08:39:32 :

diggy>Sama-sama mas...


[Write your comment]
Name (required)
Email (required-will not published)
 
Comment

9023
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
My Name is Rully Yulian Muhammad Firmansyah. I am an IT Trainer, IT Consultant and Application Developer spesializing in Microsoft .NET technology and SQL Server database. I live in Bandung, Indonesia. My hobby is to play Guitar. [Read More...]
Top Download 
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 3175 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 2592 times  
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 2180 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 2127 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 1806 times  
Article Category 
Links 
Award 
Certifications 
MOS 2007
MCAS
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News