0

在您问之前,我已经花了数周的时间在谷歌上搜索,但无济于事。我目前正在为 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. 用户 /who is not admin/ 与登录屏幕一起显示。

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

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

4

3 回答 3

2

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

于 2012-11-15T13:42:54.830 回答
0

我正在按照相同的思路设计一些东西,我发现TempVars()从用户登录的结果中将用户权限插入到 a 中很有用。它仅从登录更新,而不是数据库中的其他任何地方。

来自 MSDN 的有关 TempVar 的信息,但Access 博客中有更好的描述

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

于 2012-11-15T13:27:15.997 回答
0

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

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

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

MainMenu_FRMEnabled = 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

此外,出于安全原因,请确保您为代码设置密码并禁用班次覆盖,这样任何人都无法破坏任何东西。

根据他们的登录名(您可以在登录屏幕上将其设置为临时变量)使用 DLookup 从表中查找他们的访问级别。

根据评论的第二部分。我从来没有在 dlookup 中调用过 temp var,所以我只能尝试一下。如果它不起作用,您可能需要谷歌如何正确地做到这一点。它可能需要更多或更少的引号。

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

if strUserAccess = "Admin" then
...

等等。我可能在 Dlookup 上打错了字,我不能 100% 确定这是否可行,但应该可以。

于 2012-11-15T13:49:14.477 回答