У меня есть код, который работает для открытия одной конкретной формы, но мне нужно настроить разные уровни пользователя, которые затем можно использовать для ограничения доступа к различным формам в программе Access.
У меня есть экран входа, которыйиспользует данные (имя пользователя / пароль) из таблицы employee
, в этой таблице также есть столбец внешнего ключа с именем employeeTypeId
, кроме того, у меня есть таблица с именем Access
, в которой employeetypeId
отличается от 1
, 2
3
4
5
.
5
должен быть администратором, а 1
только для чтения и т. Д.Третья таблица - EmployeeAccess
, имеет employeeTypeId
и столбец HasAccess
с типом данных yes/no
.
Я использую это для написания кода на VBA, чтобы гарантировать доступ к определенным формам только определенным пользователям.
У меня есть код, который работает для одной формы, я пытаюсь выяснить, как использовать этот столбец HasAccess
в сочетании с employeeTypeId
и различными именами форм (необходимо выяснить, как его использовать) чтобы employeetypeId=5
пользователи имели доступ ко всем формам, employeetypeId=4
имеет доступ, скажем, ко всем формам, кроме employee
табличной формы, а employeetypeId=3
имеет доступ для редактирования только нескольких выбранных форм и т. д.
Это код доступа к форме после входа в систему (при загрузке):
Private Sub Form_Load()
If DLookup("HasAccess", "EmployeeAccess", "EmployeeTypeId=" & TempVars("EmployeeType") & " AND FormName='" & Me.Name & "'" = False) Then
MsgBox "Yo do not have access"
DoCmd.Close acForm, Me.Name
End If
End Sub
Это код в форме входа в систему:
Private Sub btnLogin_Click()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Employee", dbOpenSnapshot, dbReadOnly)
rs.FindFirst "UserName='" & Me.TextUserName & "'"
If rs.NoMatch = True Then
Me.LabelWrongUser.Visible = True
Me.TextUserName.SetFocus
Exit Sub
End If
Me.LabelWrongUser.Visible = False
If rs!Password <> Encrypt(Me.TextPassword) Then
Me.LabelWrongPass.Visible = True
Me.TextPassword.SetFocus
Exit Sub
End If
Me.LabelWrongPass.Visible = False
TempVars("EmployeeType") = rs!EmployeeTypeId.Value
End Sub
В настоящее время код открывает всеформы, когда вход в систему правильный, я хочу изменить это и дать доступ на основе employeeTypeId
.
==========================
Private Sub btnLogin_Click()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Employee", dbOpenSnapshot, dbReadOnly)
rs.FindFirst "UserName='" & Me.TextUserName & "'"
If rs.NoMatch = True Then
Me.LabelWrongUser.Visible = True
Me.TextUserName.SetFocus
Exit Sub
End If
Me.LabelWrongUser.Visible = False
If rs!Password <> Encrypt(Me.TextPassword) Then
Me.LabelWrongPass.Visible = True
Me.TextPassword.SetFocus
Exit Sub
End If
Me.LabelWrongPass.Visible = False
TempVars("EmployeeType") = rs!EmployeeTypeId.Value
If DLookup("HasAccess", "EmployeeAccess", "EmployeeTypeId=" & TempVars("EmployeeType")) Then
TempVars("FormName") = rs!FormName.Value And DoCmd.OpenForm (
Я просто хочу знать, как использовать DoCmd.OpenForm с TempVars ("FormName") и, если это возможно.