Home > Visual Basic > Pengaturan Hak Akses Level Menu

Pengaturan Hak Akses Level Menu

May 18, 2010

Salah satu fitur menarik yang sebaiknya dimiliki oleh aplikasi adalah fitur untuk pengaturan hak akses pengguna program. Contoh

Gambar diatas adalah fitur pengaturan hak akses yang dimiliki oleh aplikasi Smart Library School😀.

Artikel kali ini juga dibuat berdasarkan fitur tersebut dan tentunya sudah saya sensor agar layak untuk konsumsi umum😀.

Pertama kita akan buat rancangan tabelnya (operator, menu_induk dan menu_anak).

Berikut struktur lengkapnya :

Biar makin manteb kita liat juga contoh datanya :

Untuk menu program kita buat pake Menu Editor aja biar lebih simple, nah sekarang bagaimana caranya mengaktifkan/menonaktifkan menu sesuai dengan hak akses yang dimiliki oleh operator.

Query untuk mendapatkan hak akses masing-masing operator lebih kurang seperti berikut :

SELECT hak_akses FROM operator WHERE operator = ‘NAMA_OPERATOR’

Kemudian kita buat sebuah prosedur misal dengan nama disableMenu

Private Sub disableMenu(ByVal fMain As Form, ByVal hakAkses As String)
    Dim ctl     As Control
    Dim rsMenu  As ADODB.Recordset

    strSql = "SELECT menu_name " & _
             "FROM menu_anak " & _
             "WHERE id NOT IN (" & hakAkses & ") " & _
             "ORDER BY id"
    Set rsMenu = openRecordset(strSql)
    If Not rsMenu.EOF Then
        Do While Not rsMenu.EOF
            For Each ctl In fMain.Controls
                If TypeName(ctl) = "Menu" Then
                    If ctl.Name = rsMenu("menu_name").Value Then
                        ctl.Enabled = False
                        Exit For
                    End If
                End If
            Next

            rsMenu.MoveNext
        Loop
    End If
    Call closeRecordset(rsMenu)
End Sub

Nah query + prosedur diatas ini kita letakkan di bagian frmLogin

Private Sub cmdLogin_Click()
    Dim objOperator     As clsOperator
    Dim statusOperator  As STATUS_OPERATOR
    Dim hakAkses        As String

    If isEmptyText(txtOperator, "Operator") Then Exit Sub
    If isEmptyText(txtPassword, "Password") Then Exit Sub

    Set objOperator = New clsOperator
    With objOperator
        .operator = txtOperator.Text
        .password = txtPassword.Text

        statusOperator = .isValidUser
        hakAkses = .hakAkses
    End With
    Set objOperator = Nothing

    Select Case statusOperator
        Case OP_TDK_DITEMUKAN
            Call msgWarning("Operator belum terdaftar !!!")
            txtOperator.SetFocus

        Case OP_PASS_SALAH
            Call msgWarning("Password salah")
            txtPassword.SetFocus

        Case OP_PASS_OK
            Call disableMenu(frmMain, hakAkses) 'panggil prosedur disableMenu disini
            frmMain.Show

            Unload Me
    End Select
End Sub

Selanjutnya kita switch ke bagian manipulasi data operator, berikut tampilannya :

Untuk tombol Tambah, Perbaiki dan Hapus diabaikan saja dan kita fokus pada tombol Hak Akses

Private Function getSelectedMenu(ByVal menuID As Long, ByVal hakAkses As String) As Long
    Dim arrMenuAkses()  As String
    Dim strMenuID       As String

    Dim pos             As Long

    If Not Len(hakAkses) > 0 Then
        getSelectedMenu = 0

    Else
        If InStr(1, hakAkses, ",") > 0 Then
            arrMenuAkses = Split(hakAkses, ",")

            If menuID = arrMenuAkses(LBound(arrMenuAkses)) Then
                strMenuID = menuID & ","

            ElseIf menuID = arrMenuAkses(UBound(arrMenuAkses)) Then
                strMenuID = "," & menuID

            Else
                strMenuID = "," & menuID & ","
            End If

        Else
            strMenuID = CStr(menuID)
        End If

        pos = InStr(1, hakAkses, strMenuID)
        getSelectedMenu = IIf(pos > 0, 1, 0)
    End If
End Function

Private Sub showMenu(ByVal operator As String, ByVal tree As XTreeOpt)
    Dim rsMenuInduk     As ADODB.Recordset
    Dim rsMenuAnak      As ADODB.Recordset

    Dim selectedMenu    As Long
    Dim keyChild        As String
    Dim daftarHakAkses  As String

    'ambil hak akses operator
    strSql = "SELECT hak_akses FROM operator WHERE operator = '" & rep(operator) & "'"
    daftarHakAkses = CStr(dbGetValue(strSql, "1,2,3")) '1,2,3 -> hak akses default

    With tree
        .Clear

        .AddCheck "mnuAll", , "Daftar Menu Program", , True

        'menampilkan menu induk
        strSql = "SELECT id, menu_name, menu_caption " & _
                 "FROM menu_induk " & _
                 "ORDER BY id"
        Set rsMenuInduk = openRecordset(strSql)
        If Not rsMenuInduk.EOF Then
            Do While Not rsMenuInduk.EOF
                .AddCheck rsMenuInduk("menu_name").Value, .Nodes("mnuAll"), rsMenuInduk("menu_caption").Value, , True

                'menampilkan menu anak
                strSql = "SELECT id, menu_name, menu_caption " & _
                         "FROM menu_anak " & _
                         "WHERE menu_induk_id = " & rsMenuInduk("id").Value & " " & _
                         "ORDER BY id"
                Set rsMenuAnak = openRecordset(strSql)
                If Not rsMenuAnak.EOF Then
                    Do While Not rsMenuAnak.EOF
                        selectedMenu = getSelectedMenu(rsMenuAnak("id").Value, daftarHakAkses)

                        keyChild = "K" & CStr(rsMenuAnak("id").Value)
                        .AddCheck keyChild, .Nodes(rsMenuInduk("menu_name").Value), rsMenuAnak("menu_caption").Value
                        .Value(keyChild) = selectedMenu

                        rsMenuAnak.MoveNext
                    Loop
                End If
                Call closeRecordset(rsMenuAnak)

                rsMenuInduk.MoveNext
            Loop
        End If
        Call closeRecordset(rsMenuInduk)

        .ExpandAll
        .Nodes(1).Selected = True
    End With
End Sub

Private Sub cmdHakAkses_Click()
    With frmHakAkses
        .operator = gridOP.TextMatrix(gridOP.Row, 1)
        Call showMenu(.operator, .treeHakUser)

        .Caption = "Hak Akses : " & UCase(.operator)
        .Show vbModal
    End With
End Sub

Contoh tampilan jika kita mengklik tombol Hak Akses

Komponen yang saya gunakan untuk menampilkan menu dalam bentuk hirarki diatas adalah komponen vbAccelerator VB6 Option Tree Control

Terakhir kita tutup dengan kode untuk menyimpan hak akses sesuai dengan menu yang dipilih.

Private Function getMenuID(ByVal strKode As String) As String
    getMenuID = Right(strKode, Len(strKode) - 1)
End Function

Private Sub cmdSimpan_Click()
    Dim hakAkses   As String

    Dim nodX        As Object
    Dim nodY        As Object

    Dim x           As Long
    Dim y           As Long

    Set nodX = treeHakUser.Nodes(1).Child
    For x = 1 To treeHakUser.Nodes(1).Children
        Set nodY = nodX.Child

        For y = 1 To nodX.Children
            If treeHakUser.Value(nodY.Index) = OptionTreeCheckFull Or treeHakUser.Value(nodY.Index) = OptionTreeCheckPartial Then
                hakAkses = hakAkses & getMenuID(nodY.Key) & ","
            End If

            Set nodY = nodY.Next
        Next y

        Set nodX = nodX.Next
    Next x

    If Len(hakAkses) > 0 Then hakAkses = Left(hakAkses, Len(hakAkses) - 1)

    If Not Len(hakAkses) > 0 Then
        MsgBox "Minimal 1 hak akses untuk '" & UCase(operator) & "' harus dipilih", vbExclamation, "Peringatan"

    Else
        strSql = "UPDATE operator SET hak_akses = '" & hakAkses & "' WHERE operator = '" & rep(operator) & "'"
        conn.Execute strSql

        MsgBox "Perubahan hak akses '" & UCase(operator) & "' sudah disimpan.", vbInformation, "Informasi"
        Unload Me
    End If
End Sub

Eh tunggu dulu….😀 saya masih ada sedikit pertanyaan.

Gimana klo kita ingin menambah sub menu baru di bawah menu Laporan misal sub menu rekap pembelian dan rekap penjualan ?

Tentunya menu baru ini juga harus kita entrikan ke tabel menu_anak dan tentunya juga akan sedikit menyebalkan kalo ini dilakukan secara manual dan tentunya juga😀 solusinya insya Allah akan kita bahas pada artikel berikutnya😀

Selamat MENCOBA🙂

  1. Athallah
    June 5, 2010 at 11:44 am

    Wah thx ya mas, sy cb dl ya..

  2. June 6, 2010 at 6:54 am

    Athallah :

    Wah thx ya mas, sy cb dl ya..

    Oke sama2x

  3. yani
    August 2, 2010 at 4:48 am

    ass… bos
    mau tanya..
    knp setiap saya runing slalu muncul peringatan debug
    USER-DEFINE TYPE NOT DEFINE untuk
    Private Sub showMenu(ByVal operator As String, ByVal tree As XTreeOpt)

    mohon penjelasan…
    trimakasih sbelumnya

  4. August 2, 2010 at 7:17 am

    Sample programnya membutuhkan komponen vbAccelerator VB6 Option Tree Control jadi download dulu trus diregistrasikan.

    • yani
      August 11, 2010 at 1:11 am

      bos…sudah saya registrasi.. tp begitu ranning selalu compile error : expected array..
      please..please..

      • August 11, 2010 at 1:14 am

        Btw itu dibagian kode yg mana ya?

  5. yani
    August 11, 2010 at 3:24 am

    debug ERROR : EXPECTED ARRAY

    Private Sub cmdHakAkses_Click()
    => Call showMenu(.operator, .treeHakUser)

    BOS help me…

    • August 11, 2010 at 3:33 am

      Anehh, sy baru download ulang sample project diatas enggak error.
      Mungkin mbanya ada ngerubah kode enggak, coba di emailkan aja samplenya ke k4m4r82@yahoo.com

      • yani
        August 11, 2010 at 3:37 am

        ok saya emailkan…
        trimakasih banyak sbelumnya

  6. cahyo
    August 16, 2010 at 4:25 am

    Ini kode pakai VB 6 ya Om? ada yang versi VB.NET ga?…

    • August 16, 2010 at 4:46 am

      Ada om, download dulu sourcenya trus tinggal manfaatkan fasilitas upgrade to .NET nya😀

      Trus tinggal revisi dikit agar bisa jalan 100%🙂

      • yudhi
        May 4, 2012 at 6:01 pm

        om admin..error terus ni pas jalaninnya..padahal udah di upgrade ke vb.net..klo boleh ada yg vb.net nya juga..biar blajarny cepat..maklum pemula

        • May 4, 2012 at 6:54 pm

          Justru karna pemula itu harus banyak belajar, masa’ mau jadi pemula trus😀

  7. Cahyo
    August 16, 2010 at 6:08 am

    Admin :
    Ada om, download dulu sourcenya trus tinggal manfaatkan fasilitas upgrade to .NET nya
    Trus tinggal revisi dikit agar bisa jalan 100%

    Okay Thanks OM

  8. agung
    August 30, 2010 at 1:11 am

    tabelnya banyak ya Gan…

    • August 30, 2010 at 5:35 am

      Wewww banyak ya? kayaxnya cuma 3 tabel deh

  9. agung
    August 30, 2010 at 3:37 pm

    Admin :
    Wewww banyak ya? kayaxnya cuma 3 tabel deh

    …sapa tau Gan, bisa cuman satu …
    btw, salam kenal dan sukses selalu, nice blog…

    • August 31, 2010 at 3:40 am

      Oke om salam kenal juga

  10. Qais
    October 21, 2010 at 6:27 am

    om mw tanya nh,..
    kl kasus gn om :
    ane cm butuh admin bisa akses ke semua menu tp kl kasir cm bs akses menu transaksi aj menu yg lainnya ngak aktif gmn itu om.

    HEELP ME >>>>>

    • October 21, 2010 at 6:56 am

      Ya udah, paling gampang di hardcode aja dg cara mengecek user yg login, misal klo selain admin tinggal diset aja properties Enable=False selain menu transaksi.

      Klo menunya lumayan banyak gunakan perulangan untuk mengecek dan menonaktifkan menunya.

  11. November 4, 2010 at 5:39 pm

    Thanx buat ilmunya,..aku udah donlot & ga ada error,..thanx ya

    • November 5, 2010 at 12:03 am

      Oke om sama2x

  12. akbar
    January 13, 2011 at 6:32 am

    udh aku coba tadi, trus untuk coding yang (SELECT hak_akses FROM operator WHERE operator = ‘NAMA_OPERATOR’) itu di simpan dimana ya?di form apa?aku masih bingung

    • January 13, 2011 at 8:35 am

      adanya di frmOperator method showMenu om

  13. antosuke
    June 16, 2011 at 10:17 am

    rumus bikin enkripsinya gmn mas??

    • June 16, 2011 at 11:35 am

      Jangan om !!!
      Ribet banget mendingan pake yang udah ada aja, coba meluncur kesini.

  14. antosuke
    June 23, 2011 at 2:23 am

    mas di program ini ada form penggunanya ga??

    • June 23, 2011 at 3:40 am

      Ada om, makanya sourcenya dicoba dulu baru nanya

  15. antosuke
    June 25, 2011 at 4:22 pm

    ok,,bos..maksih atas sarannya!

    • June 26, 2011 at 4:42 am

      Sama2x om😀

  16. antosuke
    July 1, 2011 at 8:09 am

    bos program nya dah aku bikin ulang tapi pas login pake id yang bikin didatabase ga bisa msuk muncul pesan nama operator tidak terdaftar..itu knpa bos????tolong bantuannya bos..

    • July 1, 2011 at 9:25 am

      Coba diprintnya value dari querynya, contoh :

      strSql = "PERINTAH SQLNYA OM"
      Debug.Print strSql
      

      Setelah itu coba cek di Immediate Window (CTRL + G) hasil dari perintah querynya

  17. antosuke
    July 4, 2011 at 2:30 pm

    bos dah aku kasih kasih coding “Debug.Print strSql” di sql form operator tapi ga muncul pesan salahnya dimna…!!apa y yg salah ya bos…tolong bantuannya..!makasih

    • July 4, 2011 at 2:36 pm

      Gimana mau nolong om, masa’ main tebak2xan sy bukan dukun lagi
      Om sih pelit banget copas coding kek, apa kek😀

  18. antosuke
    July 4, 2011 at 3:18 pm

    apa aku kirim program y aja ke email ya bos…!!!

    • July 5, 2011 at 2:04 am

      Startup objectnya om di set Main jangan langsung frmLoginya

  19. antosuke
    July 5, 2011 at 3:47 am

    apa dulu bos..???mnuutamanya dulu or apa??

  20. antosuke
    July 5, 2011 at 3:49 am

    bos a dah krim cntoh prog y ke Email bos..tlong bntu ya!!

    • July 5, 2011 at 4:00 am

      Kan udah sy jawab om, Startup objectnya di set ke Main jangan langsung frmLoginya, kan program om buka koneksi databasenya ada di method Main.

      Mudah2xan enggak ada pertanyaan lanjutan gimana ngeset Startup object ke Main. Gubrakkkkk

  21. antosuke
    July 5, 2011 at 4:16 am

    Udah jadi bos.makasih banyak…!!semoga bos jadi orang sukses n blog y tambah maju!!amien!!

  22. July 5, 2011 at 4:30 am

    Amin🙂

  23. antosuke
    July 7, 2011 at 1:09 pm

    bos tanya lagi…kenapa aku login pke nama operator selain admin kan harusnya ga bisa semua datanya…tapi ini ko malah bisa buka datanya!!itu gmn bos??

  24. July 7, 2011 at 11:31 pm

    Iya om harusnya enggak bisa, coba dicek lagi logika program om😀

  25. antosuke
    July 8, 2011 at 1:28 pm

    yang dicek di form apanya bos??form login or apa di modulnya yah!!…coz form ya byk c bos..!makasih bos

    • July 8, 2011 at 2:30 pm

      Gimana sih om program buatan sendiri kok malah bingung ???
      Kan tinggal di cek aja event tombol loginnya bukannya pengecekan operatornya valid atw enggak disitu ?

  26. antosuke
    July 10, 2011 at 1:14 pm

    lah aku kan cuma niru program ya bos..jadi ga tau semuanya.masih bingung a bos..jadi tlong bantuan.terimakasih

    • July 11, 2011 at 12:04 am

      Makanya om jadi copaser yg smart jangan hanya copas dan trus jalan ya udah…
      tapi dipelajari juga, coba dinonaktifkan beberapa baris kode trus lihat pengaruhnya diprogram gimana atw ganti nilai2x property komponennya dilihat juga hasilnya gmana begitu seterusnya sampai om benar2x paham.

      Kita memang membutuhkan contoh untuk belajar om, sy kutip nih pernyataan mbah Einstein “Mencontoh bukanlah salah satu cara untuk belajar, tapi satu – satunya cara untuk belajar“.

      Berdasarkan pengalaman, ciri2x programmer yg serius “bisa melakukan hal yg sama berulang2x dan enggak bosan” dia enggak akan peduli seharian didepan komputer hanya untuk memperbaiki 1 baris kode yang error.

      Klo om baru coba 1,2,3 kali error langsung nyerah “ada kemungkinan om bakalan gagal dalam proses seleksi alam menjadi programmer”.

  27. joko
    November 1, 2011 at 5:47 am

    bos, gw udah nyoba nich cOpttree.ocx nya, tapi begitu dikompile dan dibuat file setupnya, kemudian dijalankan dikompie baru, tree menu nya error, out of date gitu pesannya….solusinya gimana?

    • November 1, 2011 at 8:41 am

      Komponen cOpttree.ocx membutuhkan 2 referensi tambahan yaitu :
      1. ssubtmr6.dll
      2. COMCTL32.OCX

      Nah biasanya yg bermasalah di file COMCTL32.OCX, coba copy file COMCTL32.OCX punyanya om ke komputer target klo udah ada ditimpa aja.

  28. December 15, 2011 at 5:15 pm

    mas tolong yang versi dot.net dong …. plz

  29. December 15, 2011 at 6:16 pm

    mas saya sdh convert to vb.net tapi errornya disini … bisa tolong di bantu :

    .AddCheck(“mnu_all”, , “Daftar Menu Program”, , True)

    .AddCheck(rsMenuInduk.Fields(“menu_name”).Value, .get_Nodes(“mnuAll”), rsMenuInduk.Fields(“menu_caption”).Value, , True)

    .AddCheck(keyChild, .get_Nodes((rsMenuInduk.Fields(“menu_name”).Value)), rsMenuAnak.Fields(“menu_caption”).Value)

    • December 19, 2011 at 1:22 pm

      Kenapa enggak pake komponen treeview bawaan .NET nya aja om

  30. December 19, 2011 at 3:58 pm

    sebelumnya saya belum pernah pakai treeview, jadi untuk mulainya masih belum tau, apakah algoritma kerjanya sama dari yang mas bikin dengan bawaan .net, mohon penjelasannya.

    • December 19, 2011 at 7:11 pm

      Coba seperti ini om :

      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          Dim arrMenuName() As String = {"mnuMaster", "mnuTransaksi", "mnuLaporan"}
          Dim arrMenuCaption() As String = {"Master", "Transaksi", "Laporan"}
      
          With treeHakUser
              .Clear()
      
              .AddCheck("mnuAll", Nothing, "Daftar Menu Program", cTreeOpt6.OptionTreeCheckTypes.OptionTreeCheckFull, True)
      
      
      
              For index As Integer = 0 To arrMenuName.GetUpperBound(0)
                  .AddCheck(arrMenuName(index), .get_Nodes("mnuAll"), arrMenuCaption(index), cTreeOpt6.OptionTreeCheckTypes.OptionTreeCheckFull, False)
              Next
      
              .ExpandAll()
              .get_Nodes(1).Selected = True
          End With
      End Sub
      
  31. December 21, 2011 at 7:25 am

    Maaf mas saya masih belum mengerti, yang kemarin saya ganti dengan code yg ini, malah tampilnya cuma Master, Transaksi dan Laporan.

    • December 23, 2011 at 2:39 pm

      Namanya juga contoh om, tinggal disesuaian dg kasus om.

  32. denita
    April 1, 2012 at 4:24 pm

    assalamualikum
    salam kenal

    ka’ dalam tutorial ini kk menggunakan database access, saya bingung untuk menterjemahkan ke MySQL dan juga saya menggunakan vb.net 2008
    dapatkah kk membantu membuat tutorial pada vb.net 2008 dan MySQL
    kiranya sesuatu ini dapat membantu para pembaca khususnya saya yang sangat membutuhkan hak akses login

    Terima kasih ka

    • April 2, 2012 at 12:49 pm

      Waalaikumussalam

      Klo dalam waktu dekat kayaxnya belum bisa, soalnya skrg lumayan sibuk😀

      Untuk database harusnya enggak ada masalah apakah mau pake access atw mysql, di VB .NET juga sudah ada komponen treeviewnya.

      Jadi semua perlengkapan sudah ada tinggal mempelajari alur program diatas.

  33. April 1, 2012 at 10:50 pm

    salam kenal sob. bs upload lg gx untuk komponen vbAccelerator VB6 Option Tree Control nya soalnya udah expire…

  34. tomdcool
    May 4, 2012 at 12:31 am

    gan, kalo databasenya pake mysql listing module koneksinya gimana gan? mohon bantuannya gan..

    • May 4, 2012 at 1:10 pm

      Coba kesini om.

  35. tomdcool
    May 4, 2012 at 11:14 pm

    gan, kalo vbexplorerbar bisa diatur hak akses juga gak gan?dimana perubahannya dengan yang pembahasan ini gan, mohon pencerahannya…

    • May 7, 2012 at 8:24 am

      Enggak banyak om, silahkan dicoba dulu😀

  36. tomdcool
    May 8, 2012 at 10:03 pm

    sebelumnya om, saya buat program vb6 pake mysql, trus ane pake hak akses yang om buat,pas di running password & operator di mysql bisa jalan, tapi untuk hak aksesnya kok gak jalan yah om? misalnya operator ‘rudi’ yang enable ‘id’ 1,2 yang menu lain ane disable, tapi pas di running enable semua,.. apakah untuk penulisan di field hakakses nya yang salah? mysql sama ms. acces apakah ada beda penulisan (dalam field hakakses) om?

  37. tomdcool
    May 9, 2012 at 1:22 am

    om,setelah saya coba2, pertanyaan kedua saya sudah terpecahkan, tapi pertanyaan yang pertama om saya sudah mentok… mohon pencerahannya om.. please..!!!

    • May 10, 2012 at 10:02 am

      Masa’ gitu aja udah nyerah om dimana semangat coding😀

    • May 10, 2012 at 10:02 am

      Masa’ gitu aja udah nyerah om, dimana semangat codingnya😀

  38. tomdcool
    May 11, 2012 at 1:25 am

    please om…

    • May 11, 2012 at 7:35 pm

      D’oh si om pantang menyerah ya? Jadi kasian juga😀

      Coba ini om, kodenye enggak lengkap jadi dilengkapi dulu

      Private Sub addMenu(ByVal explorerBar As Object, ByVal barIcons As Object, ByVal itmIcons As Object, ByVal hakAkses As String)
          Dim rsMenuInduk As ADODB.Recordset
          Dim rsMenuAnak  As ADODB.Recordset
          Dim cBar        As Object
          
          Dim i           As Long
          Dim x           As Long
          Dim rowCount(1) As Long
          
          With explorerBar
              .UseExplorerStyle = False
              
              .Redraw = False
              
              .BackColorStart = WARNA_BIRU
              .BackColorEnd = WARNA_BIRU
               
              .ImageList = itmIcons.hIml
              .BarTitleImageList = barIcons.hIml
              
              ' menampilkan menu induk
              strSql = "SELECT id, menu_name, menu_caption " & _
                       "FROM menu_induk " & _
                       "ORDER BY id"
              Set rsMenuInduk = openRecordset(strSql)
              If Not rsMenuInduk.EOF Then
                  rowCount(0) = getRecordCount(rsMenuInduk)
                  
                  For i = 1 To rowCount(0)
                      Set cBar = setBarMenu(explorerBar, rsMenuInduk("menu_name").Value, rsMenuInduk("menu_caption").Value, 0)
                      
                      ' menampilkan menu anak
                      ' pada saat menampilkan menu anak, tambahkan kondisi pengecekan hak akses
                      strSql = "SELECT menu_name, menu_caption " & _
                               "FROM menu_anak " & _
                               "WHERE menu_induk_id = " & rsMenuInduk("id").Value & " AND id IN (" & hakAkses & ") " & _
                               "ORDER BY id"
                      Set rsMenuAnak = openRecordset(strSql)
                      If Not rsMenuAnak.EOF Then
                          rowCount(1) = getRecordCount(rsMenuAnak)
      
                          For x = 1 To rowCount(1)
                              Call setItemMenu(cBar, rsMenuAnak("menu_name").Value, rsMenuAnak("menu_caption").Value, 0)
      
                              rsMenuAnak.MoveNext
                          Next x
                          
                      Else
                          .Bars.Remove rsMenuInduk("menu_name").Value
                      End If
                      Call closeRecordset(rsMenuAnak)
                      
                      rsMenuInduk.MoveNext
                  Next i
              End If
              Call closeRecordset(rsMenuInduk)
              
              Set cBar = setBarMenu(explorerBar, "mnuKeluar", "Keluar", 1)
              Call setItemMenu(cBar, "mnuKeluarDrProgram", "Keluar dari Program", 1)
              
              .Redraw = True
          End With
      End Sub
      

      Jadi ada tambahan parameter hakAkses di method addMenu

      Private Sub Command1_Click()
          Dim rs As ADODB.Recordset
          Dim hakAkses As String
          
          strSql = "SELECT hak_akses FROM operator " & _
                   "WHERE operator = 'NAMA_OPERATOR' AND password = 'PASSWORD'"
          Set rs = openRecordset(strSql)
          If Not rs.EOF Then
              hakAkses = rs(0).Value
          End If
          
          Call addMenu(vbalExplorerBarCtl1, barIcons, itemIcons, hakAkses)
      End Sub
      
      • herman
        May 12, 2012 at 3:56 am

        lah.. kok menu induk’a yg hilang om..
        gimana biar menu anak’a aja yg hilang om. sesuai dengan hak akses’a..

      • tibot
        May 12, 2012 at 7:24 pm

        kok ndak ada efek ya om.. tetap aja menu samping’a muncul semua.. ndak terseleksi dia..

  39. herman
    May 12, 2012 at 3:55 am

    lah.. kok menu induk’a jadi hilang om..
    cemana biar menu anak’a aja yg hilang om.. sesuai dengan hak akses’a..

    • May 12, 2012 at 8:47 am

      Coba dicek lagi query untuk menampilkan menu anaknya, soalnya programnya otomatis menghapus menu induk klo enggak ada menu anaknya.

  40. herman
    May 12, 2012 at 6:13 pm

    gini om.. saya menggabungkan SC hak akses dengan SC menu samping menggunakan VBExpolerBar.. saya pake tu SC yg om kasih diatas tu.. malah SC anak’a hilang semua om..
    haha.. bingung dah..

  41. May 12, 2012 at 10:02 pm

    Hadoh2x ni si om2x masa’ harus sy kasih kode lengkap dulu baru pada bisa, coba dicek lagi query untuk menampillkan menu anaknya :

    strSql = "SELECT menu_name, menu_caption " & _
             "FROM menu_anak " & _
             "WHERE menu_induk_id = " & rsMenuInduk("id").Value & " AND id IN (" & hakAkses & ") " & _
             "ORDER BY id"
    

    Di query itu kan ada kondisi ID IN (hakAkses), coba dicek nilai variabel hakAksesnya ada isinya atw enggak.

    • tibot
      May 13, 2012 at 1:23 pm

      haha.. om query’a udh bener kok..
      tapi masalah’a.. aku menggunakan mysql server jdi dia selalu error di query yg telah kita tambahin kondisi ID IN (hakAkses) nya. klo menggunakan MSACCESS seperti punya om ndak ada permasalahan..

    • tibot
      May 13, 2012 at 2:24 pm

      ok om.. udh dapat saya atasi.. saya akali dengan menggunakan textbox..
      thank’s ya om.. atas SC’a.. moga ndak puyeng menjawab pertanyaan dari kami” ni.. haha

  42. tomdcool
    May 12, 2012 at 11:08 pm

    om itu yang commad1 maksudnya di button login gitu om? apa dimana?

    • May 13, 2012 at 8:05 am

      Ya jelas di tombol Login om, masa’ di tombol Exit😀.

      • Guna Parampampam
        May 13, 2012 at 3:35 pm

        lah klo di tombol login kan error mas..
        soal’a fungsi addmenu itu kan ada’a di formutama..
        sementara tombol login itu kan ada di formlogin..
        jadi bingung mas..

    • tibot
      May 13, 2012 at 2:28 pm

      klo agan masukin ke button login menggunakan SC hak akses ini.. pasti dia akan error.
      jadi di form utama tambahin sebuah textbox. trus ntar saat login buat agar nama pengguna muncul di textbox form utama.. trus SC ini masukin aja di formload formutama’a..

      Dim rs As ADODB.Recordset
      Dim hakAkses As String

      strSql = “SELECT hak_akses FROM operator ” & _
      “WHERE operator = ‘” & text1.text & “‘”
      Set rs = openRecordset(strSql)
      If Not rs.EOF Then
      hakAkses = rs(0).Value
      End If

      Call addMenu(vbalExplorerBarCtl1, barIcons, itemIcons, hakAkses)

  43. tibot
    May 13, 2012 at 3:30 pm

    Usul OM.. gimana klo om buat aja tutor hak akses’a dengan vbexplorerbar’a.. biar teman” disini ndak mentok” disitu aja.. trima kasih klo om mau terima ide saya ini..

  44. May 13, 2012 at 5:19 pm

    Wah ternyata banyak peminatnya juga ya duet MAWUT antara komponen vbalExplorerBar dan hak akses, jadi sebelum rusuh silahkan download kodenya disini😀.

  45. tomdcool
    May 16, 2012 at 12:20 am

    OM ADMIN..!!! TERIMA KASIH BANYAKKKK!!!!
    tapi om ada yang masih nyangkut nih, kalo pas formmainnya load biar menu anaknya ketutup gimana om.. heeheeeheee..

    • May 19, 2012 at 8:39 am

      Coba kesini om.

  46. baka
    July 27, 2012 at 3:53 pm

    link source code download mn om..??
    sya cari2 kq gk ad link’na…
    ato coding vb 6 lgsg d taruh d vb .net na…
    sualnya pake vb.net om…😦

    • July 27, 2012 at 4:35 pm

      Ada kok om link downloadnya, silahkan dicari dg lebih teliti lagi😀

  47. baka
    July 28, 2012 at 3:08 pm

    ohh yaa..ada trnyta..hhe..
    oh yaa..bca2 dr comentnya d atas..mksdnya “dari source code trs manfaatkan fasilitas upgrade to .NET nya”…upgrade to .net???
    gmn cranya itu…maklum pemula…😀
    sualnya buat buat program yg ad hak akses ky gni..hhe..

    • July 28, 2012 at 6:38 pm

      Untuk upgrade berikut langkah2xnya om :
      1. Jalankan Visual Basic .NET
      2. Klik menu File -> Open -> Project/Solution

      Trus cari file project Visual Basic 6nya, nanti kan otomatis langsung nampil wizard upgradenya.

  48. baka
    July 29, 2012 at 8:17 am

    lha kq error om…
    yg cTreeOpt6.ocx di taruh mana d vb.net…
    pas upgrade btuh cTreeOpt6.ocx ini sualnya..

    • July 30, 2012 at 1:59 pm

      Ya memang klo upgrade dari VB 6 ke VB .NET enggak 100% jalan, jadi memang ada sebagian kode yg harus direvisi secara manual😀

  49. yulhan
    August 1, 2012 at 9:44 am

    trm ksh codenya membantu sy. sy coba pake codenya untuk program chart akun di akuntansi. tapi gak bisa 3 level. ex : Harta -> Harta Lancar -> Kas. yg terjadi kas sejajar dengan Harta Lancar. mohon pencerahannya. terima kasih banyak sharing ilmunya. jazakallah

    • yulhan
      August 1, 2012 at 10:14 am

      alhamdulillah sy utak-atik sdh bisa: ternyata nodenya sy tambah lagi. skl lagi trm kasih banyak

      • August 4, 2012 at 10:16 am

        Oke om sipp🙂

  50. mdiha
    September 7, 2012 at 7:17 am

    ngiming ngiming download nya g bisa bisa, linknya sudah g berlaku, mohon admin share lagi dong, terima kasih

  51. October 10, 2012 at 4:57 pm

    Hak Akses level 2 nya gmn ya?

  52. dimas
    November 21, 2012 at 8:42 am

    komponent cTreeOpt6.ocx saya coba di windows7 kenapa ga bisa ya gan, punya solusinya ga gan?

  53. Hipni
    February 5, 2013 at 6:47 am

    mas mau nanya di ada perintah .velue ini untuk apa ya mas???

    • February 5, 2013 at 1:57 pm

      Property yg digunakan untuk mengambil nilai, coba perhatikan kode berikut :

      Dim rs      As ADODB.Recordset
      Dim strSql  As String
              
      strSql = "SELECT nomorinduk, nama FROM siswa"
      
      Set rs = New ADODB.Recordset
      rs.Open strSql, conn, adOpenForwardOnly, adLockReadOnly
      If Not rs.EOF Then
          Debug.Print rs("nama")
          Debug.Print rs("nama").Value
      End If
      rs.Close
      Set rs = Nothing
      

      Perhatikan kode pada baris 9 dan 10 diatas, akan menghasilkan output yg sama yaitu nama dari siswa, tetapi usahakan untuk selalu menggunakan perintah baris ke 10.

      Alasannya adalah di VB 6 mempunyai kemampuan mendeteksi property default, jadi klo kita menuliskan kode berikut :

      Debug.Print rs("nama")
      

      Sama artinya kita menuliskan perintah

      Debug.Print rs("nama").Value
      

      Contoh lain :

      Text1.Text = "Ini nama ku"
      
      Debug.Print Text1
      Debug.Print Text1.Text
      

      Kode pada baris 3 dan 4 diatas juga akan menghasilkan output yg sama, tetapi usahakan untuk selalu menggunakan perintah pada baris ke 4.

      Permasalah akan muncul ketika program yg kita buat menggunakan VB 6 akan di upgrade ke VB .NET, nah biasanya kode-kode yang sepert ini :

      Debug.Print rs("nama")
      Debug.Print Text1
      

      akan bermasalah jika di upgrade ke VB .NET, soalnya tool upgradenya bingung untuk mencari padanan kodenya.

      CMIIW🙂

  54. April 10, 2013 at 3:24 pm

    Selamat Siang…gimana caranya buat menu level 3 nya…

    • April 11, 2013 at 3:42 pm

      Klo berdasarkan contoh di atas, rancangan tabelnya belum mendukung om, tetapi utk kodenya lebih kurang seperti menambahkan menu level 2

  55. April 12, 2013 at 10:55 am

    Om admin,,,bisa saya dikasih bocoran kodingnya..hehehe saya binggung..untuk menambah menu level 3..

    • April 12, 2013 at 2:51 pm

      Pada prinsipnya kan sama aja om, ini perintah dasar untuk menambahkan menu di komponen vbAccelerator VB6 Option Tree Control :

      Private Sub cmdTestBuatMenu_Click()
          With treeHakUser
              .Clear
              
              ' >> Menu Master
              ' menu level 1
              .AddCheck "mnuMaster", , "Master", , True
              
                  ' menu level 2
                  .AddCheck "mnuAnggota", .Nodes("mnuMaster"), "Anggota", , True
                      ' menu level 3
                      .AddCheck "mnuGuru", .Nodes("mnuAnggota"), "Guru"
                      .AddCheck "mnuPegawai", .Nodes("mnuAnggota"), "Pegawai"
                      .AddCheck "mnuSiswa", .Nodes("mnuAnggota"), "Siswa"
                  
                  ' menu level 2
                  .AddCheck "mnuPengarang", .Nodes("mnuMaster"), "Pengarang"
                  .AddCheck "mnuPenerbit", .Nodes("mnuMaster"), "Penerbit"
              
              ' >> Menu laporan
              ' menu level 1
              .AddCheck "mnuLaporan", , "Laporan", , True
              
                  ' menu level 2
                  .AddCheck "mnuPeminjaman", .Nodes("mnuLaporan"), "Peminjaman"
                  ' menu level 2
                  .AddCheck "mnuPengembalian", .Nodes("mnuLaporan"), "Pengembalian"
                  
                  ' menu level 2
                  .AddCheck "mnuStatistikPengunjung", .Nodes("mnuLaporan"), "Statistik Pengunjung", , True
                      ' menu level 3
                      .AddCheck "mnuPembacaBuku", .Nodes("mnuStatistikPengunjung"), "Pembaca Buku"
                      .AddCheck "mnuPeminjamanBuku", .Nodes("mnuStatistikPengunjung"), "Peminjaman Buku"
                  
              .ExpandAll
              .Nodes(1).Selected = True
          End With
      End Sub
      

      Output perintah di atas bisa dilihat disini.

  56. April 23, 2013 at 8:51 am

    om..admin, saya sudah bisa nampilin menu level3.dengan menambah 1 lagi tabel (menu_level_3).tapi pas mau saya simpan kenapa, yang masuk bukan menu_id dari tabel3..kok menu_captionnya ya..dimanakah letak kesalahannya om..???

  57. April 24, 2013 at 8:17 am

    Ok Om…saya sudah berhasil membuat menu level 3, menggunakan smart menu..tapi peroalannya pas saya klik menu level2nya..kok gak bisa berubah iconya..seperti menu di level3..yang kalau double klik bisa berubah2…mohon pencerahaannya om Admin

    • April 25, 2013 at 10:57 am

      Yg mana om, kayaxnya butuh screenshot nih

  58. andi
    June 8, 2013 at 3:13 pm

    om, ini downloadnya udah g bisa ya?😦

  59. July 25, 2013 at 3:36 am

    Om ada contoh yang lebih mudah gak?kebingungan juga saya

    • July 25, 2013 at 9:13 am

      Enggak ada om pelan2x aja mempelajarinya bia enggak bingung

  60. November 1, 2013 at 11:51 pm

    om, ada contoh project yg sampe level 3 ga om..
    kaya contoh ini https://coding4ever.files.wordpress.com/2013/04/12042013-1.png , tp ditambahin otorisasi CRUD jg gt…😀

  61. rizzan
    December 5, 2013 at 3:41 pm

    mas bisa gak klo akses yang gak aktifnya tidak dimumculkan/fontnya grey

    • December 23, 2013 at 1:57 pm

      Klo untuk menyembunyikan menu yg enggak punya hak akses, coba cek prosedur disableMenu, kemudian ganti perintah “ctl.Enabled = False” menjadi “ctl.Visible = False”

  62. ribhen
    February 26, 2014 at 1:20 pm

    tidak bisa mas menyembunyikan menu dengan opsi diatas error ”visible property can’t be set on this control”

  1. November 5, 2012 at 2:49 pm
  2. April 16, 2014 at 9:13 am
Comments are closed.
%d bloggers like this: