首页  ·  知识 ·  编程语言
VB6应用系统的权限管理
网友  http://blog.csdn.net/fangke/  VB  编辑:德仔   图片来源:网络
实现方法:建立如下表,对每一个form的操作功能中加入如下的AskRights Function,即可对每一个form及其中的每一项功能进行单独控制,包括菜单项的控制
实现方法:建立如下表,对每一个form的操作功能中加入如下的AskRights Function,即可对每一个form及其中的每一项功能进行单独控制,包括菜单项的控制,出错处理请查本人另一文档
'  表结构说明:
'  表:users_frm(Form设定)  f001 IDENTITY Form ID号,   f002 V20  Form名,  f003 V50 form说明,  f004 V50  对应菜单名,   f005 V2  新增,  f006 V2 存盘,  f007 V2 删除,  f008 V2  修改,  f009 V2  查询,  f010 V2  打印,  f011 V2  特殊键1,  f012 V2  特殊键2,   f013 V2  特殊键3,   f014 V2  特殊键4,   f015 V2  特殊键5
'  表:users_k(组别表)    f001 V20  组别编码, f002 V20 名称,   f003 V50 说明
'  表:users_kx(组别从表)   f001 V20  组别编码, f002 V20 form名, f003 V2  菜单可见否,  f004 V2 菜单是否有效,  f005 V2  新增,  f006 V2 存盘,  f007 V2 删除,  f008 V2  修改,  f009 V2  查询,  f010 V2  打印,  f011 V2  特殊键1,  f012 V2  特殊键2,   f013 V2  特殊键3,   f014 V2  特殊键4,   f015 V2  特殊键5
'  表:users_x(用户权限表)  f001 V20  用户编码, f002 V20 form名, f003 V2  菜单可见否,  f004 V2 菜单是否有效,  f005 V2  新增,  f006 V2 存盘,  f007 V2 删除,  f008 V2  修改,  f009 V2  查询,  f010 V2  打印,  f011 V2  特殊键1,  f012 V2  特殊键2,   f013 V2  特殊键3,   f014 V2  特殊键4,   f015 V2  特殊键5'
'  表:users (用户表)       f001 IDENTITY 用户内部ID号  f002 V20  用户编码,  f003 V20  名称,   f004 V20  密码,     f005 V20  组别,   f006 V50  说明
 
'======菜单控制===========================
Function ControlMENU(userID As String, MenuName As String) As String
    Dim intResult As Integer
    Dim strSQL As String
    Dim AdoRes As New ADODB.Recordset
    On Error GoTo ErrorHandle
    strSQL = "select a.f002 as f1,b.f004 as f2,a.f003 as f3,a.f004 as f4 from users_x a,users_frm b where a.f002=b.f002 and a.f001='" & userID & "' and b.f004='" & MenuName & "'"
    Set AdoRes = Cn.Execute(strSQL)
    If AdoRes.EOF Then
        'MsgBox "此用户没有定义权限,请联系系统管理员设定!!!", vbOKOnly + vbCritical, "警告"
        ControlMENU = Empty
        GoTo PROC_EXIT
    End If
    ControlMENU = IIf(IsNull(AdoRes.Fields("f3")), "", AdoRes.Fields("f3")) & "~" & IIf(IsNull(AdoRes.Fields("f4")), "", AdoRes.Fields("f4"))
PROC_EXIT:
    Set AdoRes = Nothing
    Exit Function
ErrorHandle:
    Call ShowError("Permissons", "ControlMenu", err.Number, err.Description, "Y")
End Function
'======各项功能控制===========================
Function AskRights(userID As String, FormName As String, FuncName As String) As Boolean
    ' UserCode 用户ID号,  FormName Form名称,   FuncName  功能名称
    ' 功能名称说明:
    ' Insert  新增按钮
    ' Save    存盘按钮
    ' Delete  删除按钮
    ' Modify  修改按钮
    ' Query    查询按钮
    ' Print   打印按钮
    ' Key1    特殊按钮1
    ' Key2    特殊按钮2
    ' Key3    特殊按钮3
    ' Key4    特殊按钮4
    ' Key5    特殊按钮5
   
    Dim intResult As Integer
    Dim strSQL As String
    Dim AdoRes As New ADODB.Recordset
    Dim FuncString As String
   
    On Error GoTo ErrorHandle
    strSQL = "select f005,f006,f007,f008,f009,f010,f011,f012,f013,f014,f015 from users_x where f001='" & sUserID & "' and f002='" & FormName & "'"
    'Debug.Print strSQL
    Set AdoRes = Cn.Execute(strSQL)
    If AdoRes.EOF Then
        AskRights = False
        GoTo PROC_EXIT
    End If
   
    Select Case UCase(FuncName)
    Case "INSERT"
        If UCase(IIf(IsNull(AdoRes.Fields("f005")), "", AdoRes.Fields("f005"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "SAVE"
        If UCase(IIf(IsNull(AdoRes.Fields("f006")), "", AdoRes.Fields("f006"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "DELETE"
        If UCase(IIf(IsNull(AdoRes.Fields("f007")), "", AdoRes.Fields("f007"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "MODIFY"
        If UCase(IIf(IsNull(AdoRes.Fields("f008")), "", AdoRes.Fields("f008"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "QUERY"
        If UCase(IIf(IsNull(AdoRes.Fields("f009")), "", AdoRes.Fields("f009"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "PRINT"
        If UCase(IIf(IsNull(AdoRes.Fields("f010")), "", AdoRes.Fields("f010"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "KEY1"
        If UCase(IIf(IsNull(AdoRes.Fields("f011")), "", AdoRes.Fields("f011"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "KEY2"
        If UCase(IIf(IsNull(AdoRes.Fields("f012")), "", AdoRes.Fields("f012"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "KEY3"
        If UCase(IIf(IsNull(AdoRes.Fields("f013")), "", AdoRes.Fields("f013"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "KEY4"
        If UCase(IIf(IsNull(AdoRes.Fields("f014")), "", AdoRes.Fields("f014"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    Case "KEY5"
        If UCase(IIf(IsNull(AdoRes.Fields("f015")), "", AdoRes.Fields("f015"))) = "Y" Then
            AskRights = True
        Else
            AskRights = False
        End If
    End Select
   
    'If AskRights = False Then MsgBox "您没有此项操作的权限 !   ", vbInformation, "帮助信息"
   
PROC_EXIT:
    Set AdoRes = Nothing
    Exit Function
ErrorHandle:
    Call ShowError("Permissons", "AskRights", err.Number, err.Description, "Y")
End Function
Public Sub SetMenu(obj As Object, userID As String)
    ' 设置菜单
    Dim MenuName As String
    Dim YorN As String
    Dim MenuObj As Object
    On Error GoTo ErrorHandle
   
    For Each MenuObj In obj.Controls
        Select Case TypeName(MenuObj)
        Case "Menu"
            YorN = UCase(ControlMENU(userID, MenuObj.name))
            If Len(YorN) = 0 Then GoTo lap
           
            If Mid(YorN, 1, InStr(1, YorN, "~") - 1) = "N" Then
                MenuObj.Visible = False
            ElseIf Mid(YorN, 1, InStr(1, YorN, "~") - 1) = "Y" Then
                MenuObj.Visible = True
            End If
            If Mid(YorN, InStr(1, YorN, "~") + 1, 1) = "N" Then
                MenuObj.Enabled = False
            ElseIf Mid(YorN, InStr(1, YorN, "~") + 1, 1) = "Y" Then
                MenuObj.Enabled = True
            End If
lap:
        End Select
    Next
   
Exit Sub
ErrorHandle:
    Call ShowError("Permissons", "SetMenu", err.Number, err.Description, "Y")
End Sub
'此过程放在frmMain的Form_load中
Public Sub SetMenu(obj As Object, userID As String)
    ' 设置菜单
    Dim MenuName As String
    Dim YorN As String
    Dim MenuObj As Object
    On Error GoTo ErrorHandle
   
    For Each MenuObj In obj.Controls
        Select Case TypeName(MenuObj)
        Case "Menu"
            YorN = UCase(ControlMENU(userID, MenuObj.name))
            If Len(YorN) = 0 Then GoTo lap
           
            If Mid(YorN, 1, InStr(1, YorN, "~") - 1) = "N" Then
                MenuObj.Visible = False
            ElseIf Mid(YorN, 1, InStr(1, YorN, "~") - 1) = "Y" Then
                MenuObj.Visible = True
            End If
            If Mid(YorN, InStr(1, YorN, "~") + 1, 1) = "N" Then
                MenuObj.Enabled = False
            ElseIf Mid(YorN, InStr(1, YorN, "~") + 1, 1) = "Y" Then
                MenuObj.Enabled = True
            End If
lap:
        End Select
    Next
   
Exit Sub
ErrorHandle:
    Call ShowError("Permissons", "SetMenu", err.Number, err.Description, "Y")
End Sub
 
本文作者:网友 来源:网络http://blog.csdn.net/fangke/
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读