
Tabel RoleDetails berisi data rinci tentang hak akses untuk role tertentu

Kolom FormName yang terdapat di tabel FormActions berisi data mengenai nama-nama form yang terdapat di dalam aplikasi tersebut dan Actn merupakan kolom yang berisi data mengenai nama-nama control button yang terdapat di dalam form tersebut.

Hasilnya
Imports System.Data.SqlClient
Module modCommon
Public sqlConn As New SqlClient.SqlConnection(My.Settings.SQLConnection)
Public strUserName, strRoleID As String
Public Function GetLeftRightItemFromControl(ByVal Teks As String) As String()
'//cari item kiri dari teks
Dim intPanjangString As Integer
Dim intPosisiDash As Integer
intPanjangString = Strings.Len(Teks)
intPosisiDash = Teks.IndexOf(">")
Dim strID As String = Trim(Strings.Left(Teks, intPosisiDash - 1))
Dim strNama As String = Trim(Strings.Mid(Teks, intPosisiDash + 2, intPanjangString - intPosisiDash + 2))
Dim arrString As String() = {strID, strNama}
Return arrString
End Function
Private Function GetActionButton(ByVal RoleID As String, ByVal FormName As String) As List(Of String)
Dim listOfString As New List(Of String)
Using sqlCmd As New SqlClient.SqlCommand
sqlCmd.Connection = modCommon.sqlConn
sqlCmd.CommandType = CommandType.Text
sqlCmd.CommandText = String.Format("Select * From RoleDetails Where RoleID = '{0}' And FormAction = '{1}' and Tag = 'action'", RoleID, FormName)
modCommon.OpenConnection()
Using sqlDr As SqlClient.SqlDataReader = sqlCmd.ExecuteReader
If sqlDr.HasRows Then
While sqlDr.Read
listOfString.Add(sqlDr("MenuName").ToString.Trim)
End While
End If
sqlDr.Close()
End Using
modCommon.CloseConnection()
End Using
Return listOfString
End Function
Public Sub GetButtons(ByVal YourForm As Form)
Dim listOfString As List(Of String) = modCommon.GetActionButton(modCommon.strRoleID, YourForm.Tag.ToString)
If listOfString.Count > 0 Then
For Each aControl As Control In YourForm.Controls
modCommon.GetEnableButton(aControl, listOfString)
Next
Else
For Each aControl As Control In YourForm.Controls
modCommon.GetEnableButton(aControl)
Next
End If
End Sub
Private Sub GetEnableButton(ByVal YourControl As Control)
'//cek dulu apakah control yang bersangkutan merupakan container control
'//atau bukan (disini digunakan recursive method)
If YourControl.HasChildren Then
For Each aChildControl As Control In YourControl.Controls
GetEnableButton(aChildControl)
Next
Else
If TypeOf YourControl Is Button Then
YourControl.Enabled = False
End If
End If
End Sub
Private Sub GetEnableButton(ByVal YourControl As Control, ByVal YourListOfString As List(Of String))
'//cek dulu apakah control yang bersangkutan merupakan container control
'//atau bukan (disini digunakan recursive method)
If YourControl.HasChildren Then
For Each aChildControl As Control In YourControl.Controls
GetEnableButton(aChildControl, YourListOfString)
Next
Else
If TypeOf YourControl Is Button Then
If YourListOfString.Contains(YourControl.Text) Then
YourControl.Enabled = True
Else
YourControl.Enabled = False
End If
End If
End If
End Sub
Public Sub OpenConnection()
If sqlConn.State <> ConnectionState.Open Then sqlConn.Open()
End Sub
Public Sub CloseConnection()
If sqlConn.State = ConnectionState.Open Then sqlConn.Close()
End Sub
End Module
Tidak ada komentar:
Posting Komentar