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:
| UserLogin | Rolle |
|---|---|
| max.muster | lieferant |
| anna.admin | administrator |
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.