WordPress-Userrollen in Access nachvollziehen: Authentifizierungs- und Berechtigungskonzepte im Zusammenspiel

Warum das Ganze?

Wenn Du mit Access Daten fĂŒr ein WordPress-Portal auswertest – etwa ein Lieferantenportal oder Mitgliederbereich -, willst Du oft wissen:
Was darf dieser Benutzer eigentlich?
Und das, ohne direkt in WordPress eingeloggt zu sein.

Ich zeige Dir, wie Du WordPress-Userrollen lokal in Access auslesen und fĂŒr Deine Logik (z. B. beim Öffnen eines Formulars) nutzen kannst.

WordPress: So sind die Rechte organisiert

WordPress nutzt zwei zentrale Tabellen fĂŒr Nutzer und Rollen:

wp_users
Speichert grundlegende Daten wie Benutzername, E-Mail und Passwort-Hash.

wp_usermeta
Speichert Zusatzdaten – darunter auch die Rollen (meta_key = wp_capabilities).

Beispiel-Eintrag aus wp_usermeta:

a:1:{s:13:"administrator";b:1;}

Das ist ein PHP-Serialisierungsformat. Wir mĂŒssen das spĂ€ter parsen.

Ziel: Rolle in Access erkennen

Du willst z. B. in Access je nach Rolle unterschiedliche Formulare öffnen.
Dazu brauchst Du:

  1. Einen ODBC-Zugriff auf die WordPress-Datenbank
  2. Eine Routine, die den wp_capabilities-Eintrag ausliest und lesbar macht
  3. Eine eigene Rollen-Mapping-Tabelle in Access (optional)

Schritt 1: ODBC-Verbindung zur MySQL-Datenbank

Verwende den MySQL-Connector (ODBC). Beispiel-Connect:

Public Function GetWPUserMeta(ByVal WPUserID As Long) As String
    Dim conn As Object, rs As Object, sql As String
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    conn.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 = " & WPUserID & " AND meta_key = 'wp_capabilities'"

    rs.Open sql, conn
    If Not rs.EOF Then
        GetWPUserMeta = rs.Fields(0).Value
    End If
    rs.Close
    conn.Close
End Function

Schritt 2: PHP-Serialisierung in Access lesbar machen

Ein einfacher Parser reicht oft, wenn Du nur die erste Rolle brauchst:

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

Ergebnis bei obigem JSON: "administrator" → administrator

Schritt 3: Rollen verwenden in Access

Beispiel: Du willst beim Start eines Formulars prĂŒfen, ob der Nutzer lieferant ist:

Private Sub Form_Load()
    Dim userID As Long
    Dim rawRole As String
    Dim role As String

    userID = Nz(DLookup("id", "lokal_wp_users", "user_login = '" & Environ("USERNAME") & "'"), 0)
    If userID = 0 Then
        MsgBox "Kein Benutzer gefunden": Exit Sub
    End If

    rawRole = GetWPUserMeta(userID)
    role = ExtractRole(rawRole)

    Select Case role
        Case "administrator"
            DoCmd.OpenForm "frm_AdminDashboard"
        Case "lieferant"
            DoCmd.OpenForm "frm_Lieferant"
        Case Else
            MsgBox "Unbekannte Rolle: " & role
    End Select
End Sub

T-SQL: Optional per SQL-Server synchronisieren

Wenn Du die WordPress-Tabellen regelmĂ€ĂŸig in den SQL Server replizierst (z. B. via SSIS oder MySQL-Linked-Server), kannst Du dort mit SQL die Rollen sichtbar machen:

SELECT
    u.ID,
    u.user_login,
    JSON_VALUE(REPLACE(REPLACE(um.meta_value, 'a:1:{s:', '{"'), ';b:1;}', '":true}'), '\"', '"') AS role_json
FROM wp_users u
JOIN wp_usermeta um ON u.ID = um.user_id
WHERE um.meta_key = 'wp_capabilities'

(Erfordert SQL Server 2016+ wegen JSON_VALUE())

Mein Tipp: Mapping-Tabelle in Access

Mach Dir die Arbeit leichter und definiere eine eigene Tabelle:

tbl_Rollenmapping

WP_RolleAccess_Berechtigung
administratorAdmin
lieferantLieferant
mitarbeiterIntern

Dann kannst Du im Access-Startup prĂŒfen, welche internen Rechte freigeschaltet werden.

WordPress & Access – geht zusammen

Mit ein bisschen ODBC, string parsing und norddeutscher Ruhe bekommst Du WordPress-Rollen auch in Access in den Griff.
Nicht hĂŒbsch – aber stabil.

Kategorien: