Mapping Hak Akses User Pada MenuStrip Sampai Control Button

Posted at : Aug/14/2007
25159 Views | 36 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 :


InfoEbook-ebook yang tersedia yang dapat dipesan secara langsung atau melalui google play store.



[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

farizd (Nov/25/2017 09:51:02)

 mas ada warning tsb? sepertinya gk gagal koneksi ke sql,

mohon masukannya

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

farizd (Nov/25/2017 10:04:24)

 ExecuteScalar requires an open and available Connection. The connection's current state is closed.

aziz (Oct/10/2019 08:09:22)

 mas tak share di grup facebook saya buat pembelajaran bersama


[Write your comment]

Name (required)

Email (required-will not published)

 
Comment
2375
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6923 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4882 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4014 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3455 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2874 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2021   Rully Yulian MF   All rights reserved.