是否有一种简单的方法允许用户仅编辑他们创建的表单条目,并且只允许管理员编辑表/所有表单?例如:我需要我的全体员工能够添加和编辑自己的会议,而无法编辑其他员工的会议。
答案 0 :(得分:3)
这不是完全简单...访问曾经拥有内置的各种安全性(现在仍然如此)但现在已经弃用了,所以如果你的用户想要,和知道如何,他们可以绕过你的表格。 Access实际上并不是一个安全的平台,因此您尝试构建的任何安全性只能防止意外错误,甚至不会出现半心半意的攻击。</ p>
无论如何,你需要捕获每个用户的用户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
表,至少包含一个UserID
字段,其中包含用户的WSUserName()
和IsAdministrator
是/否字段。
然后,在您的表单中,在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登录的PC,工作,然后注销,然后其他人可以登录。