Microsoft Access登录系统&管理员用户级安全性

时间:2012-11-15 12:12:38

标签: vba ms-access

在你问我有几个星期的谷歌搜索这个无济于事。我目前正在为Microsoft Access 2007中的企业设计一个数据库系统。系统工作正常,但我需要帮助解决一些问题。

目前,我有两种形式;

Login_FRM - 作为登录屏幕的表单。目前此框的代码是

If IsNull(Me.Username) Or Me.Username = "" Then
        MsgBox "You must enter the username of an active employee.", vbOKOnly, "Required Data"
            Me.Username.SetFocus
        Exit Sub
    End If

If IsNull(Me.PasswordLookup) Or Me.PasswordLookup = "" Then
        MsgBox "You must provide a password.", vbOKOnly, "Required Data"
            Me.PasswordLookup.SetFocus
        Exit Sub
    End If


    Me.PasswordLookup.Value = DLookup("[Password]", "User_TBL", "[Username] ='" & Me.Username & "'")

    If Me.PasswordLookup.Value = Me.PasswordLookup.Value Then

    DoCmd.OpenForm "MainMenu_FRM"

    Else
            MsgBox "Incorrect Username or Password. Please try again.", vbOKOnly, "Please try again"
        Me.PasswordLookup.SetFocus
        Exit Sub
    End If    
End Sub

检查是否为null等,但也检查存储在User_TBL中的字段以查看用户是否可以获得访问权限。

我还有MainMenu_FRM,它是数据库所有进程的主要跳板。

基本上我想做的是只允许用户访问管理员菜单,如果在User_TBL中注册为管理员(是/否)

我会非常感谢任何人的帮助。

由于

以下是整个过程的简要概述

  1. 用户/非管理员/显示登录屏幕。

  2. 用户输入详细信息并单击登录,即可访问主菜单。

  3. 点击主菜单上的管理员按钮。被拒绝访问。

3 个答案:

答案 0 :(得分:2)

我认为最好向所有人显示登录屏幕,然后在他们尝试访问管理员屏幕时检查他们是否为管理员。

答案 1 :(得分:0)

我正在设计相同的内容,我发现从用户登录的结果中将用户权限插入TempVars()是很有用的。它仅从登录更新,而不是数据库中的任何其他位置。

Info on TempVar from MSDN,但the Access Blog

有更好的说明

在打算访问受限的任何按钮(打开表单)上,onclick事件将评估用户权限变量。因此,如果不允许用户使用该表单,我可以拥有MsgBox

答案 2 :(得分:0)

我认为你需要做的事情比你想象的要简单。

只需在MainMenu_FRM的表单加载中执行if语句,该语句仅启用管理员按钮并设置默认值,以便其他人禁用。然后只有管理员才能点击它。

为什么管理员也不必登录?只需让他们登录,并在他们登录后适当设置他们的权限。

即。将MainMenu_FRM中的每个按钮设置为属性中的Enabled = no

Private Sub Form_Load()
'****Admin****
If strUserAccess = "Admin" Then
Me.buttonThatTakesYouSomewhere.Enabled = True
Me.buttonThatTakesYouSomewhereElse.Enabled = True


 '****USER****
ElseIf strUserAccess = "User" Then
Me.buttonThatTakesUsersSomewhere.Enabled = True
Me.buttonThatTakesUsersSomewhereElse.Enabled = True
end if

end sub

此外,出于安全原因,请确保您密码代码并禁用班次覆盖,以便没有人可以破坏任何内容。

根据登录名(您可以在登录界面设置为tempvar)使用DLookup从表中查找其访问级别。

根据评论的第二部分。 我从来没有在dlookup中调用过temp var,所以我只能用它来刺。 如果它不起作用,您可能需要谷歌如何正确地执行此操作。它可能需要更多或更少的引号。

dim strUserAccess as String
strUserAccess = DLookup("fieldname", "tablename", "[UserName]="" & TempVars("Username").value  & "")

if strUserAccess = "Admin" then
...

等等。 我可能已经把Dlookup打错了,我不是百分之百确定它会起作用,但它应该这样做。