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:
- Einen ODBC-Zugriff auf die WordPress-Datenbank
- Eine Routine, die den
wp_capabilities-Eintrag ausliest und lesbar macht - 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_Rolle | Access_Berechtigung |
|---|---|
| administrator | Admin |
| lieferant | Lieferant |
| mitarbeiter | Intern |
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.