Mapping Hak Akses User Pada MenuStrip Sampai Control Button

Created at : Aug/14/2007   [Click this link to download code sample]
3178 Views   7 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

[Write your comment]
Name (required)
URL (optional)
Example : http://www.yulianmf.com  
Comment

JSFC
Input code above below (Case Sensitif) :
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 2235 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 2192 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 1523 times  
DataGridView Grouping : Downloaded 1243 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 1232 times  
Article Category 
Links 
Award 
Certifications 
MOS 2007
MCAS
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise - IT Training 
Native Enterprise Facebook Group 
My Facebook 
My LinkedIn 
Syndication (RSS 2.0) 
Powered By 
Native Enterprise News