110,534
社区成员
发帖
与我相关
我的任务
分享
Public Function GetUserCrenticial(ByVal strUserName As String, ByVal strPassword As String) As String
Dim strPasswordHashed = mdlComm.Md5Hash(strPassword)
Dim tmpUser As New User
tmpUser.Uname = strUserName
Dim strTmp As String = tmpUser.GetProperties(strUserName)
If strTmp = "OK" Then
If tmpUser.Password = strPasswordHashed Then
Return "OK"
Else
Return "User name or password not correct!"
End If
Else
Return "User name or password not correct!"
End If
End Function
Public Function GetUserGroupACL(ByVal strUserGroup As String) As String
Dim strGroup() As String = Split(strUserGroup, "|")
Dim strACL, strTmp As String
Dim strSQL As String, dt As New DataTable
strACL = ""
Try
For i As Integer = 0 To strGroup.Length - 1
strSQL = "SELECT TOP 1 strACL FROM UserGroup WHERE UGName='" & strGroup(i) & "'"
dt.Clear()
sqlSelect(strSQL, dt)
If dt.Rows.Count > 0 Then
strTmp = dt.Rows(0).Item("strACL").ToString
strACL = mdlSetup.InstrAdd(strACL, strTmp)
End If
Next
Return strACL
Catch ex As Exception
Return ex.Message
Exit Function
End Try
End Function
Public Function GetProperties(ByVal Uname As String) As String
Dim strSQL As String, dt As New DataTable
strSQL = "SELECT TOP 1 * FROM [User] WHERE Uname='" & Uname & "'"
sqlSelect(strSQL, dt)
If dt.Rows.Count > 0 Then
With dt.Rows(0)
_Uname = Uname
_Ename = .Item("Ename").ToString
_Cname = .Item("Cname").ToString
_Group = .Item("Group").ToString
_Position = .Item("Position").ToString
_Password = .Item("Password")
_Worknumber = .Item("WorkNumber").ToString
_Online = .Item("Online")
_Enabled = .Item("Enabled")
_LastLoginDate = .Item("LastLoginDate")
_strACL = .Item("strACL").ToString
'用户权限还要加上GROUP的
_strACL = mdlSetup.InstrAdd(_strACL, GetUserGroupACL(Group))
_strHostLab = .Item("strHostLab").ToString
_strSBU = .Item("strSBU").ToString
End With
Return "OK"
Else
Return "Record does not exist."
End If
End Function
Private _Uname, _Ename, _Cname, _Group, _Position, _Password, _Worknumber As String
Private _Online, _Enabled As Boolean
Private _LastLoginDate As Date
Private _strACL, _strHostLab, _strSBU As String
Public Property Uname() As String
Get
Return _Uname
End Get
Set(ByVal value As String)
_Uname = value
End Set
End Property
Public ReadOnly Property Ename() As String
Get
Return _Ename
End Get
End Property
Public ReadOnly Property Cname() As String
Get
Return _Cname
End Get
End Property
Public ReadOnly Property Group() As String
Get
Return _Group
End Get
End Property
Public ReadOnly Property Position() As String
Get
Return _Position
End Get
End Property
Public ReadOnly Property Password() As String
Get
Return _Password
End Get
End Property
Public ReadOnly Property WorkNumber() As String
Get
Return _Worknumber
End Get
End Property
Public ReadOnly Property Online() As Boolean
Get
Return _Online
End Get
End Property
Public ReadOnly Property Enabled() As Boolean
Get
Return _Enabled
End Get
End Property
Public ReadOnly Property LastLoginDate() As Date
Get
Return _LastLoginDate
End Get
End Property
Public ReadOnly Property strACL() As String
Get
Return _strACL
End Get
End Property
Public Sub SetACLforDLG(ByVal cc As Control.ControlCollection)
If cc Is Nothing Then Exit Sub
Dim strACLeditable, strACLvisible, strACLuser(), strACLgroup(), strType() As String
Dim ControlEditable As Boolean = False, ControlVisible As Boolean = False
For Each ctl As Control In cc
If Len(ctl.Tag) > 0 Then
strType = Split(ctl.Tag.ToString.Trim, ";")
strACLeditable = strType(0)
If strType.Length >= 2 Then
strACLvisible = strType(1)
Else
strACLvisible = ""
End If
Else
strACLeditable = ""
strACLvisible = ""
End If
'若不是运行数据库(可能是历史数据库),则只允许管理员操作
If strCurrentConn <> strConnST Then
If Len(strACLeditable) > 0 Then
strACLeditable = "ADMINISTRATORS"
End If
If Len(strACLvisible) > 0 Then
strACLvisible = "ADMINISTRATORS"
End If
End If
If Len(strACLeditable) > 0 Then
'用个人ACL衡量EditControl
strACLuser = Split(CurrentUser.strACL, "|")
For i As Integer = 0 To strACLuser.Length - 1
If strACLeditable = strACLuser(i) Or strACLuser(i) = "ADMINISTRATORS" Then
ControlEditable = True
Exit For
End If
Next
'用Group ACL衡量EditControl
strACLgroup = Split(GetUserGroupACL(CurrentUser.Group), "|")
For i As Integer = 0 To strACLgroup.Length - 1
If strACLeditable = strACLgroup(i) Or strACLgroup(i) = "ADMINISTRATORS" Then
ControlEditable = True
Exit For
End If
Next
ctl.Enabled = ControlEditable
End If
If Len(strACLvisible) > 0 Then
'用个人ACL衡量ViewControl
strACLuser = Split(CurrentUser.strACL, "|")
For i As Integer = 0 To strACLuser.Length - 1
If strACLvisible = strACLuser(i) Or strACLuser(i) = "ADMINISTRATORS" Then
ControlVisible = True
Exit For
End If
Next
'用Group ACL衡量ViewControl
strACLgroup = Split(GetUserGroupACL(CurrentUser.Group), "|")
For i As Integer = 0 To strACLgroup.Length - 1
If strACLvisible = strACLgroup(i) Or strACLgroup(i) = "ADMINISTRATORS" Then
ControlVisible = True
Exit For
End If
Next
ctl.Visible = ControlVisible
End If
If ctl.Controls.Count > 0 Then
Call SetACLforDLG(ctl.Controls) '递归调用
End If
Next
End Sub
Public Sub SetACLforMENU(ByRef cms As ContextMenuStrip)
Dim strACLuser() As String = Split(CurrentUser.strACL, "|")
Dim strACLgroup() As String = Split(GetUserGroupACL(CurrentUser.Group), "|")
Dim blnDirty As Boolean = False
Dim strTag As String
For Each i As ToolStripItem In cms.Items
'If Not TypeOf (i) Is Windows.Forms.ToolStripSeparator Then
strTag = CStr(i.Tag)
If Len(strTag) > 0 Then
If strCurrentConn <> strConnST Then
strTag = "ADMINISTRATORS"
End If
blnDirty = False
'用个人ACL衡量
For k As Integer = 0 To strACLuser.Length - 1
If strTag = strACLuser(k) Or strACLuser(k) = "ADMINISTRATORS" Then
blnDirty = True
End If
Next
'用Group ACL衡量
For k As Integer = 0 To strACLgroup.Length - 1
If strTag = strACLgroup(k) Or strACLgroup(k) = "ADMINISTRATORS" Then
blnDirty = True
Exit For
End If
Next
If blnDirty = False Then
i.Enabled = False
End If
End If
Next
End Sub
Sub Form_Load
Call SetACLforDLG(Me.controls)
End Sub
Public Sub SetACLforDLG(ByVal cc As Control.ControlCollection)
If cc Is Nothing Then Exit Sub
Dim strACLeditable, strACLvisible, strACLuser(), strACLgroup(), strType() As String
Dim ControlEditable As Boolean = False, ControlVisible As Boolean = False
For Each ctl As Control In cc
If Len(ctl.Tag) > 0 Then
strType = Split(ctl.Tag.ToString.Trim, ";")
strACLeditable = strType(0)
If strType.Length >= 2 Then
strACLvisible = strType(1)
Else
strACLvisible = ""
End If
Else
strACLeditable = ""
strACLvisible = ""
End If
'若不是运行数据库(可能是历史数据库),则只允许管理员操作
If strCurrentConn <> strConnST Then
If Len(strACLeditable) > 0 Then
strACLeditable = "ADMINISTRATORS"
End If
If Len(strACLvisible) > 0 Then
strACLvisible = "ADMINISTRATORS"
End If
End If
If Len(strACLeditable) > 0 Then
'用个人ACL衡量EditControl
strACLuser = Split(CurrentUser.strACL, "|")
For i As Integer = 0 To strACLuser.Length - 1
If strACLeditable = strACLuser(i) Or strACLuser(i) = "ADMINISTRATORS" Then
ControlEditable = True
Exit For
End If
Next
'用Group ACL衡量EditControl
strACLgroup = Split(GetUserGroupACL(CurrentUser.Group), "|")
For i As Integer = 0 To strACLgroup.Length - 1
If strACLeditable = strACLgroup(i) Or strACLgroup(i) = "ADMINISTRATORS" Then
ControlEditable = True
Exit For
End If
Next
ctl.Enabled = ControlEditable
End If
If Len(strACLvisible) > 0 Then
'用个人ACL衡量ViewControl
strACLuser = Split(CurrentUser.strACL, "|")
For i As Integer = 0 To strACLuser.Length - 1
If strACLvisible = strACLuser(i) Or strACLuser(i) = "ADMINISTRATORS" Then
ControlVisible = True
Exit For
End If
Next
'用Group ACL衡量ViewControl
strACLgroup = Split(GetUserGroupACL(CurrentUser.Group), "|")
For i As Integer = 0 To strACLgroup.Length - 1
If strACLvisible = strACLgroup(i) Or strACLgroup(i) = "ADMINISTRATORS" Then
ControlVisible = True
Exit For
End If
Next
ctl.Visible = ControlVisible
End If
If ctl.Controls.Count > 0 Then
Call SetACLforDLG(ctl.Controls) '递归调用
End If
Next
End Sub