在你问我有几个星期的谷歌搜索这个无济于事。我目前正在为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中注册为管理员(是/否)
我会非常感谢任何人的帮助。
由于
以下是整个过程的简要概述
用户/非管理员/显示登录屏幕。
用户输入详细信息并单击登录,即可访问主菜单。
点击主菜单上的管理员按钮。被拒绝访问。
答案 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打错了,我不是百分之百确定它会起作用,但它应该这样做。