Design Pattern für Benutzer Rollen verwaltung

  • Hallo zusammen,

    ich arbeite derzeit, mehr aus Spaß und Interesse, an einer Wordpress Seite die nur Lokal läuft.
    Auf dieser Seite habe ich nun einige Rollen angelegt wie z. B.
    Fußball, Football, Handball, Tennis, Nur lesen und ein paar weitere Sportarten.

    Nun möchte ich auf verschiedenen Seiten gewisse Zugriffsrechte aussprechen.
    Es sind beispielsweise Buttons die jemand mit der Rolle Fußball und Football sieht und der Rest eben nicht. Dazu habe ich eine Funktion geschrieben:

    PHP
    function user_has_role($user_id, $role_name) {
        $user_meta = get_userdata($user_id);
        $user_roles = $user_meta->roles;
    
    
        return in_array($role_name, $user_roles);
    }

    Das Problem ist, das es zum einen sehr unübersichtlich wird und zum anderen was ist wenn man eine weitere Rolle hinzufügt diese jedoch noch nicht irgendwo eingeplant ist.

    Weiß jemand von Euch wie das üblicherweise gehandhabt wird? Also gibt es eine Art oder sogar ein Design Pattern das ein solches Problem löst?

    Meine Idee war man gibt den Rollen int Werte z. B. Admin = 100, Fußball = 30, Football = 29, etc.
    Somit könnte man sagen alles was kleiner ist als 30 darf den Button sehen. Kommt nun eine neue Ballsportart hinzu bekommt diese den Wert 28 und wäre somit mit drin. Das ganze ist jedoch auch sehr aufwändig, fehleranfällig und unsauber :-(

    Ich weiß derzeit nicht weiter hat jemand eine Idee? Gehört dieses Thema eigentlich hier her?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren


  • ich arbeite derzeit, mehr aus Spaß und Interesse, an einer Wordpress Seite die nur Lokal läuft.

    Weiß jemand von Euch wie das üblicherweise gehandhabt wird?

    WordPress verwendet ein Rollenkonzept, mit dem der Website-Besitzer steuern kann, was die Benutzer auf der Website tun können und was nicht. Ein Website-Besitzer kann den Benutzerzugriff auf Aufgaben wie das Schreiben und Bearbeiten von Beiträgen, das Erstellen von Seiten, das Erstellen von Kategorien, das Moderieren von Kommentaren, das Verwalten von Plugins, das Verwalten von Themen und das Verwalten anderer Benutzer verwalten, indem er jedem Benutzer eine bestimmte Rolle zuweist.

    WordPress hat sechs vordefinierte Rollen: Super Admin, Administrator, Editor, Autor, Mitwirkender und Abonnent. Jede Rolle ist berechtigt, eine Reihe von Aufgaben auszuführen, die als Fähigkeiten (Capabilities) bezeichnet werden. Es gibt viele Fähigkeiten, darunter "publish_posts", "moderate_comments" und "edit_users". Jeder Rolle ist ein Standardsatz von Fähigkeiten zugewiesen, aber andere Fähigkeiten können mit den Funktionen add_cap() undremove_cap() zugewiesen oder entfernt werden. Neue Rollen können mit den Funktionen add_role() und remove_role() eingeführt oder entfernt werden.

    Wenn du mehr haben möchtest könntest du dir die Mitglieder Plugins ansehen.
    https://kinsta.com/de/blog/wordpr…chafts-plugins/

    Du hast ja Langeweile und sicherlich Zeit die 24 zu prüfen. Gib auch Bescheid, wo Du Deinen Code dann später gefunden hast.

    Mit offenen Augen träumen

  • Danke für die Antwort.

    Leider kann ich damit nichts anfangen!

    Was ich benötige ist eine Programmiertechnische Antwort. Wieso sollte ich auf verschiedenen Seiten die Funktion von oben jedes mal bemühen wenn Wordpress (der Benutzer) weiß welche Rolle er hat?
    Ich möchte nur einmal an einer Stelle so etwas tun wie z. B.:

    PHP
    $rolle_footbal = user_has_role($user_id, 'footbal');
    $rolle_etc ...

    Diese Variable muss jetzt nur für sämtliche Archive- und Single Seiten bekannt gemacht werden!
    Dann benötigt man nicht immer wieder einen Funktionsaufruf und schreibt in seiner IF-Anweisung nur noch

    PHP
    //Hier kommt Code der nur von Footballern gesehen wird
    
    
    if($rolle_football) { ... }

    Meine Anfangsfrage war wohl nicht gut gestellt. Hat jemand einen Plan wie so etwas in PHP und mithilfe von Wordpress erreicht werden kann?

    Erreicht man so etwas vielleicht mithilfe eines Plugins in dem man Variablen global definiert und diese dann in ganz Wordpress nutzen kann? Dazu noch etwas wie sieht es bei einem solchen Vorgehen im Punkte Sicherheit aus?

    Vermutlich sind diese Fragen hier falsch da sie zu wenig mit Wordpress zu tun haben oder`?

  • Die von dir geschrieben Funktion ist schon genau richtig, ich nutze das auch in der Form. Es gibt in Wordpress leider kein Pendant dazu. Da ein Nutzer mehrere Rollen haben kann, muss man hier den Array-Vergleich bemühen. Sehe dafür keine andere Möglichkeit.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!