Rollenbasierte Feldsichtbarkeit in Access abhängig vom WordPress-Benutzertyp

Ziel

Du willst in Access steuern, welche Felder sichtbar oder editierbar sind – abhängig von der WordPress-Rolle des Benutzers.
Das macht Sinn, wenn Du z. B. Lieferanten, Mitarbeiter und Admins über das gleiche Access-Frontend arbeiten lässt – mit Daten aus WordPress.

Grundidee

  • WordPress vergibt Rollen wie administrator, editor, lieferant
  • Diese Rollen liegen im Feld wp_usermeta.meta_key = 'wp_capabilities'
  • Du liest die Rolle über ODBC oder Import nach Access
  • In Access reagierst Du dann per Formularsteuerung

Schritt 1: WordPress-Rolle auslesen

In Access brauchst Du eine Funktion, die die Rolle per ODBC zieht.

Public Function HoleWPRolle(UserLogin As String) As String
    Dim con As Object, rs As Object, sql As String
    Set con = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    con.Open "Driver={MySQL ODBC 8.0 Unicode Driver};Server=deinserver;Database=wordpress_db;User=wpuser;Password=geheim;"

    sql = "SELECT meta_value FROM wp_usermeta " & _
          "WHERE user_id = (SELECT ID FROM wp_users WHERE user_login = '" & UserLogin & "') " & _
          "AND meta_key = 'wp_capabilities'"

    rs.Open sql, con
    If Not rs.EOF Then
        HoleWPRolle = ExtrahiereRolle(rs.Fields(0).Value)
    Else
        HoleWPRolle = "unbekannt"
    End If

    rs.Close: con.Close
End Function

Und dazu ein kleiner Parser:

Public Function ExtrahiereRolle(serialized As String) As String
    Dim pos1 As Long, pos2 As Long
    pos1 = InStr(serialized, """") + 1
    pos2 = InStr(pos1, serialized, """")
    If pos1 > 0 And pos2 > pos1 Then
        ExtrahiereRolle = Mid(serialized, pos1, pos2 - pos1)
    Else
        ExtrahiereRolle = "unbekannt"
    End If
End Function

Schritt 2: Rolle beim Öffnen merken

Im Formular z. B. frm_Lieferung:

Private Benutzerrolle As String

Private Sub Form_Load()
    Dim login As String
    login = Environ("USERNAME") ' oder eigenes Mapping

    Benutzerrolle = HoleWPRolle(login)

    Call SteuereFeldSichtbarkeit
End Sub

Schritt 3: Feldsichtbarkeit steuern

Klar und direkt – ohne großes If-Else-Theater:

Private Sub SteuereFeldSichtbarkeit()
    Select Case Benutzerrolle
        Case "administrator"
            Me.FeldIntern.Visible = True
            Me.FeldIntern.Enabled = True
        Case "lieferant"
            Me.FeldIntern.Visible = False
        Case Else
            Me.FeldIntern.Visible = False
    End Select
End Sub

Optional auch Locked = True, wenn sichtbar aber schreibgeschützt.

Sonderfall: Mehrere Rollen

WordPress kann auch mehrere Rollen serialisieren:
a:2:{s:9:"editor";b:1;s:10:"lieferant";b:1;}

Dann erweitere den Parser:

Public Function RolleEnthält(raw As String, rolle As String) As Boolean
    RolleEnthält = InStr(raw, """" & rolle & """") > 0
End Function

Dann z. B. so:

If RolleEnthält(Me.Benutzerrolle, "lieferant") Then
    Me.FeldIntern.Visible = False
End If

Tabellenlösung für Rollenzuweisung (optional)

Wenn Du ODBC vermeiden willst oder es langsam ist:
Hol Dir die Rollen täglich als Textdatei oder CSV und verknüpfe sie in Access.

Beispielstruktur tbl_Userrolle:

UserLoginRolle
max.musterlieferant
anna.adminadministrator

Dann prüfe per DLookup:

Benutzerrolle = Nz(DLookup("Rolle", "tbl_Userrolle", "UserLogin = '" & Environ("USERNAME") & "'"), "unbekannt")

Fazit

Rollenbasierte Feldsichtbarkeit ist kein Hexenwerk.
Aber sie macht Access flexibler – und sicherer.
Und wenn das Schaf was nicht sehen darf, sieht’s halt auch nix.

Kategorien: