Mapping Hak Akses User Pada MenuStrip Sampai Control Button

Windows Control , Posted at : Aug/14/2007   [Click this link to download code sample]
19159 Views   33 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...

Ivan  Feb/24/2012 03:02:53 :

gj ah ui pake tv pake lv group donk ah

Rully  Feb/25/2012 10:12:05 :

Ivan > ListView itu sifatnya tabular, kalau TreeView itu hierarchical sehingga cocok digunakan untuk mapping content yang sifatnya nested.

Rully  Feb/25/2012 10:21:41 :

Ivan > Penggunaan ListView di windows forms untuk memetakan nested content tidak semudah dibandingkan dengan windows forms TreeView. Contoh penggunaan ListView untuk grouping di web based dapat dilihat disini : http://www.yulianmf.com/Multiple-Column-Data-Grouping-using-LinqDataSource-control.aspx

Wahyu  Nov/12/2012 06:33:40 :

klo Kasusnya menggunakan database Mysql gmn?.. udah coba tp gk bs...

santo  Jan/29/2014 10:25:37 :

 Master...

Saya mo tanya, klo hanya membatasi form saja, gmn caranya?

saya menggunkan database mysql

 

Terima kasih atas bantuannya

Rully  Jan/30/2014 08:07:29 :

Wahyu & Santo > Jenis database yang digunakan sebenarnya sama saja, tidak masalah, hanya berbeda di penggunaan class nya saja untuk data aksesnya. Kalau untuk hanya membatasi form saja Pilihan Form1 s/d Form-n tertentu yang ada di aplikasi tersebut tidak perlu di checklist :)

danu  Feb/28/2014 08:46:03 :

minta contoh program nya dung mas bro. program nya keren banget ini. 

minta kode trus kirim ke email kita

Rully  Feb/28/2014 09:05:39 :

Danu > Source code contoh aplikasi ini sudah ada di link di atas mas, dibawah judul artikel ini, tinggal di download :-)

danu  Feb/28/2014 10:58:10 :

 okre mas bro. matur nuwun terima kasih. saya lagi belajar, c# lagi bingung bikin akses user yang dinamis. sekali lagi terima kasih.

danu  Feb/28/2014 11:31:43 :

mas ada contoh program yang pakai c#. yang diatas pakai vb.net?

sebelum nya terima kasih. maap ngerepotin mas. 

Junie  Mar/04/2014 12:22:05 :

bisa minta contoh codingnya mas?

soalnya juga lg belajar tentang pembagian hak akses user nih

sebelumnya trimakasih mas 

suyogi sugi  Mar/30/2014 12:06:46 :

master untuk databasenya apa? terus tipe data dari databasenya apa? soalnya gak ada query databasenya nih....

 

maf merepotkan

 

suyogi sugi  Mar/30/2014 12:31:42 :

maf, dah ketemu .....^^

btw master, ko pas aku unchek yg form 1 nya kog gk false y? cma bottonya aja yg false? apa memang gtu?

pras  May/12/2014 03:38:37 :

gan, untuk pengisian content data pada tabel database nya gmn ya , mohon petunjuk?

Rully  May/31/2014 10:07:08 :

Pengisian content database itu dilakukan pada saat menu-menu di treeview nya dipilih kemudian button update di form User Rigths nya di click :-)

Maddais  Sep/01/2015 01:21:05 :

Sangat bermanfaat untuk belajar

hais sailendra  Oct/12/2015 09:06:08 :

mas settingan untuk pindahin server database nya di mana ya, maklum baru belajar nih jadi bingung cariin nya

Rully  Oct/19/2015 10:14:12 :

@hais : Maksudnya bagaimana mas? Di artikel ini tidak ada hubungannya dengan pemindahan server database :-)

hilmi  Mar/09/2016 12:57:56 :

 kalo tree menunya dinamis ngambil dari database gmna mas????

 

sharedby-hilmirusdha.blogspot.co.id

Rully  Mar/09/2016 07:19:27 :

@hilmi : Tree menunya disini sudah dinamis kok mengambil data dari database mas :)

Yusuf  Mar/17/2016 12:59:07 :

  Mas Rully,  "...untuk menjaga Data Integrity yaitu dengan menggunakan Transaction".

maksudnya "Transaction" itu apa/bagaimana ya?. mohon penjelasannya.

 

Terima Kasih.

Rully  Mar/23/2016 02:56:13 :

 @Yusuf : Transaction itu merupakan teknik atau fitur yang digunakan untuk membuat satu atau beberapa perintah sql dijadikan menjadi satu unit batch eksekusi. Apabila salah satu perintah sql failed maka perintah sql sebelumnya akan di rollback dan perintah sql selanjutnya tidak akan dijalankan.

farizd  Apr/19/2017 10:59:40 :

 maaf mas databasenya pas di coba runing ada kendala eror,ada alternatif lain?

ANAK SOLEH  Jul/19/2017 05:01:32 :

DOWNLOAD FULL PROJECT https://drive.google.com/file/d/0B55z6hBNJXFEbklpWWlXOVJsbkk/view


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

NPOJ
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 6044 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4681 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3523 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3320 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2705 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.