2016-11-09 56 views
0

我目前正在一个项目上工作,其中一个要求是使用用户的Windows登录作为他们的登录MS Access,然后他们会在那里点击角色以获得进入系统。我从来没有这样做过,但我已经在Access中建立了一个登录屏幕,它从表格中提取数据。我有成功拉动用户Windows登录的代码,但在此之后我遇到了麻烦。表名是tblUser,用户是普通用户,人力资源和管理员。目前,在该表中我有指定的号码与一般用户= 1,HR = 2的角色,管理员= 3MS Access中使用的基于角色的访问控制

The Login Screen: 
    Log On 
General User 
HR 
Admin 


Code that pulls the user information: 
Private Sub Form_Load() 
Stop 

Debug.Print Environ("UserName") 
Debug.Print Environ$("ComputerName") 

Dim strVar As String 
Dim i As Long 
For i = 1 To 255 
    strVar = Environ$(i) 
    If LenB(strVar) = 0& Then Exit For 
    Debug.Print strVar 
Next 
End Sub 

下面是我为过去我的登录屏幕的代码。通过绘制所有东西,似乎它将是同一个过程,但我不确定。有什么我可以做的下面的代码?

Private Sub btnLogin_Click() 
Dim rs As Recordset 

Set rs = CurrentDb.OpenRecordset("tblUser", dbOpenSnapshot, dbReadOnly) 

rs.FindFirst "UserName='" & Me.txtUserName & "'" 

If rs.NoMatch = True Then 
    Me.lblWrongUser.Visible = True 
    Me.txtUserName.SetFocus 
    Exit Sub 
End If 
Me.lblWrongUser.Visible = False 

If rs!Password <> Nz(Me.txtPassword, "") Then 
    Me.lblWrongPass.Visible = True 
    Me.txtPassword.SetFocus 
    Exit Sub 
End If 
Me.lblWrongPass.Visible = False 

If rs!EmployeeType_ID = 3 Then 

    Dim prop As Property 
    On Error GoTo SetProperty 
    Set prop = CurrentDb.CreateProperty("AllowBypassKey", dbBoolean, False) 

    CurrentDb.Properties.Append prop 

SetProperty: 
    If MsgBox("Would you like to turn on the bypass key?", vbYesNo, "Allow Bypass") = vbYes Then 
     CurrentDb.Properties("AllowBypassKey") = True 
    Else 
     CurrentDb.Properties("AllowBypassKey") = False 
    End If 

End If 

DoCmd.OpenForm "frmPersonal_Information" 
DoCmd.Close acForm, Me.Name 
End Sub 

我希望这是足够的信息,我正在努力完成。如果需要更多信息,请告诉我。谢谢。

+0

未拆分访问的登录屏幕是一个笑话。无论如何,像所有的会员/角色模型一样,您需要拥有用户表,角色表,user_vs_roles表。最后,登录,注销,分配角色,根据登录用户读取/验证用户角色的方法等。 –

回答

0

如果角色绑定到Windows/Active Directory登录,则不需要登录屏幕。您应该假定Windows中的登录用户合法使用工作站(如果这不是一个安全的假设,则需要查看您的IT策略)。

访问不支持角色和权限。在访问当前登录的用户并从tblUser得到他们的角色将不得不:

  1. 锁定后端,特别是访问表。
  2. 锁定Access固有的大部分用户界面,只允许使用您的前端表单。
  3. 对于您的每个前端形式,请手动确保您希望执行的任何策略都是使用VBA执行的。

最终,无论你做什么,知道如何使用Access的人都可以绕过任何形式的锁定。如果您需要防范偶然的好奇心和诚实错误,则需要将Access与更强大的DBMS(如SQL服务器或MySQL)结合使用。

+0

感谢回复@ SunKnight0如果我不将数据库绑定到Windows/Active Directory,这将成为可能。基于用户在屏幕上登录传统登录时的角色将显示各种启动页面。将要管理数据库的人理解使用Access所带来的风险,因为用户目前正在使用Excel工作表,但希望获得更多功能。 – Orange56

+0

对不起,我正在度假。您不必使用Windows登录,但只需添加更多工作。在这种情况下,除了管理其他所有内容之外,您还必须添加登录屏幕。 – SunKnight0

相关问题