Warum das Thema spannend ist
WordPress kennt Rollen wie Editor, Author, Subscriber.
Access kennt Benutzergruppen, Berechtigungsabfragen und Formulare mit Kennwortabfragen.
Beide Systeme haben StĂ€rken. Aber getrennt bringen sie wenig, wenn’s ums Reporting geht.
Ich zeige Dir, wie ich Rechte aus beiden Welten zusammenfĂŒhre. Und daraus ein sauberes, nutzerabhĂ€ngiges Reporting baue.
1. Zugriffsmodell definieren
Ich trenne grundsÀtzlich:
- Technische Authentifizierung (Wer bist Du?)
- Fachliche Berechtigung (Was darfst Du sehen?)
Die Authentifizierung kann z. B. ĂŒber WordPress-Login laufen.
Die fachliche Berechtigung liegt dann in Access.
Beispiel:
Nutzer | WP-Rolle | Access-Rolle | Sichtbare Daten |
---|---|---|---|
Anna | subscriber | Vertrieb | eigene Kunden |
Bernd | editor | Management | alle Kunden, UmsÀtze |
Caro | subscriber | Support | Tickets, keine UmsÀtze |
2. WordPress: Rollen exportieren per REST
In WordPress baue ich mir einen Endpunkt, der die Rollen liefert:
add_action('rest_api_init', function () {
register_rest_route('intern/v1', '/userrole/(?P<email>[a-zA-Z0-9@._-]+)/', [
'methods' => 'GET',
'callback' => 'rolle_ermitteln',
'permission_callback' => '__return_true'
]);
});
function rolle_ermitteln($data) {
$user = get_user_by('email', $data['email']);
if (!$user) return ['rolle' => 'none'];
return ['rolle' => implode(',', $user->roles)];
}
Dann in Access:
Function ErmittleWordPressRolle(email As String) As String
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", "https://deinshop.de/wp-json/intern/v1/userrole/" & email, False
http.Send
If http.Status = 200 Then
Dim js As Object
Set js = JsonConverter.ParseJson(http.ResponseText)
ErmittleWordPressRolle = js("rolle")
Else
ErmittleWordPressRolle = "unknown"
End If
End Function
3. Access: Benutzerrolle lokal speichern
Ich speichere bei Sessionstart die WordPress-Rolle in einer Temp-Tabelle:
Sub InitialisiereBenutzerSession(email As String)
Dim rolle As String
rolle = ErmittleWordPressRolle(email)
CurrentDb.Execute "DELETE FROM tblSession"
CurrentDb.Execute "INSERT INTO tblSession (email, rolle_wp) VALUES ('" & email & "', '" & rolle & "')"
End Sub
Diese tblSession
nutze ich spÀter in Abfragen:
SELECT * FROM kunden
WHERE (
EXISTS (
SELECT * FROM tblSession
WHERE rolle_wp LIKE '*management*'
)
OR kundenbetreuer_email = (SELECT email FROM tblSession)
)
4. Erweiterung: Access-interne Rollen + Mapping
Ich kombiniere WordPress-Rollen mit Access-internen Regeln:
WP-Rolle | Access-Rolle | Sichtbarkeit |
---|---|---|
subscriber | Vertrieb | nur eigene Kunden |
editor | Management | alle Kunden |
author | Support | Tickets, keine UmsÀtze |
Diese Tabelle tblRollenMapping
pflege ich im Backend.
Dann mache ich ein JOIN im Code:
Function ErmittleAccessRolle(wpRolle As String) As String
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT access_rolle FROM tblRollenMapping WHERE wp_rolle = '" & wpRolle & "'")
If Not rs.EOF Then
ErmittleAccessRolle = rs!access_rolle
Else
ErmittleAccessRolle = "none"
End If
rs.Close
End Function
5. Reporting: Sichtbarkeit steuern per Query
Alle Berichte greifen auf Abfragen zurĂŒck, die die Session-Tabelle und Berechtigung prĂŒfen.
Beispiel: Umsatz nach Benutzerrolle
SELECT k.kundennr, k.name, u.umsatz
FROM kunden k
LEFT JOIN umsaetze u ON k.kundennr = u.kundennr
WHERE (
SELECT access_rolle FROM tblSession
) IN ('Management', 'Vertrieb')
AND (
SELECT access_rolle FROM tblSession
) <> 'Support'
6. Formularlogik bei eingeschrÀnktem Zugriff
Wenn nur ein Teil sichtbar ist, baue ich gezielt reduzierte Formulare.
Beispiel: Kundenformular nur mit Betreuernummer
Me.RecordSource = "SELECT * FROM kunden WHERE kundenbetreuer_email = '" & AktuellerBenutzer & "'"
Oder Umsatzzahlen ausblenden:
If Benutzerrolle = "Support" Then
Me.txtUmsatz.Visible = False
Me.lblUmsatz.Visible = False
End If
7. Logging nicht vergessen
Ich protokolliere, wer wann auf was zugegriffen hat:
Sub LogZugriff(modul As String, datensatzID As Long)
CurrentDb.Execute "INSERT INTO zugriffslog (zeitpunkt, benutzer, modul, datensatz_id) " & _
"VALUES (Now(), '" & AktuellerBenutzer & "', '" & modul & "', " & datensatzID & ")"
End Sub
Das hilft bei Nachvollziehbarkeit – und bei RĂŒckfragen vom Chef.
Mein gemischtes Fazit
WordPress bringt die Authentifizierung.
Access bringt die fachliche Berechtigung.
Kombiniert bekommst Du eine skalierbare, rollenbasierte Reporting-Struktur – auch ohne Azure AD oder LDAP.
Keine Antworten