VB6应用系统的权限管理

本文介绍了一种基于数据库的权限管理系统的设计与实现方法。该系统通过五个表来管理用户的权限,包括用户表、用户权限表等,并提供了菜单控制和功能控制两个核心函数。

实现方法:建立如下表,对每一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值