2013-08-01 137 views
1

是否有一种简单的方式允许用户只编辑他们创建的表单条目,并且只允许管理员编辑表格/所有表单?例如:我需要我的全体员工能够添加和编辑他们自己的会议,但无法编辑其他员工的会议。MS Access限制表格/表格访问

回答

3

这不是究竟是简单...访问曾经有各种安全内置(但仍然),但现在已被弃用,所以如果你的用户想要,并知道如何,他们可以绕过你的表格。访问真的不是一个安全的平台,所以你试图建立的任何安全性只会防止无意的错误,但不是一个半心半意的攻击。

无论如何,你需要捕捉每个用户的用户ID(Access无法做到这一点的最盒;此功能将做到这一点):

Private Declare PtrSafe Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (lpName As Any, ByVal lpUserName As String, lpnLength As Long) As Long 

Public Function WSUserName() As String   'Returns the workstation user name 
    Dim Ret As Long, cbusername As Long, UserName As String 
    UserName = Space(256) 
    cbusername = Len(UserName) 
    Ret = WNetGetUser(ByVal 0&, UserName, cbusername) 
    If Ret = 0 Then 
     UserName = Left(UserName, InStr(UserName, Chr(0)) - 1) 
    Else 
     UserName = "" 
    End If 
    WSUserName = UserName 
End Function 

然后,你需要使用它作为表格/表格中的Creating_User文本字段的默认值。

你需要有一个tbl_Users表,其中,至少,包含用户的WSUserName()IsAdministrator是/否领域的UserID场。

然后,在你的形式,在Form_Current事件处理程序,您需要:

Me.AllowEdits = DLookup("IsAdministrator", "tbl_Users", "UserID = " & WSUserName()) Or Me.Creating_User = WSUserName() 
Me.AllowDeletions = DLookup("IsAdministrator", "tbl_Users", "UserID = " & WSUserName()) Or Me.Creating_User = WSUserName() 

这将阻止用户编辑/删除其他人的纪录,同时允许管理员编辑/删除任何人的记录。任何人都可以添加记录,并且Creating_User字段默认为WSUserName(),并且应该是只读的,只有他们(或管理员)才能对其执行任何操作。

此方法的唯一问题是它假设您的PC没有共享登录。如果PC在早上登录并且任何人都可以直接开始使用它,那么您将不得不采用不同的方法,但是对于用户使用自己的ID登录的个人电脑,这种方法可以很好地工作,工作,然后注销,然后别人可以登录。