Разрешение уровня пользователя для различных форм - PullRequest
0 голосов
/ 16 мая 2019

У меня есть код, который работает для открытия одной конкретной формы, но мне нужно настроить разные уровни пользователя, которые затем можно использовать для ограничения доступа к различным формам в программе Access.

У меня есть экран входа, которыйиспользует данные (имя пользователя / пароль) из таблицы employee, в этой таблице также есть столбец внешнего ключа с именем employeeTypeId, кроме того, у меня есть таблица с именем Access, в которой employeetypeId отличается от 1, 23 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.

tblEmployeeAccess

==========================

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") и, если это возможно.

1 Ответ

0 голосов
/ 17 мая 2019

Используя приведенный ниже код, я смог добиться результата:

Цель состояла в том, чтобы отфильтровать на основе EmployeeTypeId и HasAccess, установленных как True (комбинация обоих для открытых форм)

TempVars("FormName") = DLookup("FormName", "EmployeeAccess", "EmployeeTypeId=" & TempVars("EmployeeType") & " And HasAccess = " & True & " ")

DoCmd.OpenForm TempVars("FormName")
...