Contao-Camp 2024
Ergebnis 1 bis 15 von 15

Thema: Backend-Modul für andere Admins/Benutzer sperren

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Frage Backend-Modul für andere Admins/Benutzer sperren

    Ich möchte das Modul "Systemwartung" für andere Admins/Benutzer sperren bzw. ausblenden, aber das scheint nicht zu funktionieren:

    contao/config/config.php:
    PHP-Code:
    if(TL_MODE === 'BE')
    {
        
    // Backend-User-Instanz anlegen
        
    $objUser BackendUser::getInstance();
        
    $objUser->authenticate();
        
        if(
    $objUser->id != 1)
        {
            
    // Backend-Modul Systemwartung ausblenden für alle anderen Benutzer
            
    unset($GLOBALS['BE_MOD']['maintenance']);
        }

    Was ist falsch daran?
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    geh über den "backend_menu_builder" und entferne den Knoten im Baum

    $tree->removeChild('maintenance')

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Die sauberste Variante für Contao 4.12 und höher dafür wäre ein eigener Voter (funktioniert ab Contao 4.10 in diesem Fall). Wie man einen Voter umsetzt ist hier beschrieben: https://symfony.com/doc/current/security/voters.html
    Das Attribut des Voters wäre ContaoCorePermissions::USER_CAN_ACCESS_MODULE (contao_user.module). Wenn ich zeit hab, kann ich dafür mal ein Beispiel programmieren



    Zitat Zitat von zonky Beitrag anzeigen
    geh über den "backend_menu_builder" und entferne den Knoten im Baum

    $tree->removeChild('maintenance')
    Das würde den Zugriff aber nicht verhindern.
    Geändert von Spooky (27.12.2021 um 23:25 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das würde den Zugriff aber nicht verhindern.
    Schachbulle hat ja geschrieben, das ausblenden reicht... ;-)

  5. #5
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    geh über den "backend_menu_builder" und entferne den Knoten im Baum

    $tree->removeChild('maintenance')
    Zitat Zitat von Spooky Beitrag anzeigen
    Die sauberste Variante für Contao 4.12 und höher dafür wäre ein eigener Voter. Wie man einen Voter umsetzt ist hier beschrieben: https://symfony.com/doc/current/security/voters.html
    Das Attribut des Voters wäre ContaoCorePermissions::USER_CAN_ACCESS_MODULE (contao_user.module). Wenn ich zeit hab, kann ich dafür mal ein Beispiel programmieren

    Das würde den Zugriff aber nicht verhindern.
    Das sind für mich böhmische Dörfer. Obwohl ich programmiere. Mit dieser ganzen Symfony-Syntax stehe ich auf Kriegsfuß. Um etwas zu begreifen, muß ich es anfassen können. Das fällt mir hier enorm schwer gegenüber einfachem PHP. Ich werde einfach mal
    PHP-Code:
    $tree->removeChild('maintenance'); 
    in meinen Code schreiben. Wobei ich mich frage, woher $tree kommt/kommen soll.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Um etwas zu begreifen, muß ich es anfassen können.
    Das stelle ich mir mir schwer vor, egal um welches Framework es sich handelt
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Wie auch immer, hier das Beispiel als Voter:
    PHP-Code:
    // src/Security/Voter/AdminMaintenanceAccessVoter.php
    namespace App\Security\Voter;

    use 
    Contao\BackendUser;
    use 
    Contao\CoreBundle\Security\ContaoCorePermissions;
    use 
    Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
    use 
    Symfony\Component\Security\Core\Authorization\Voter\Voter;
    use 
    Symfony\Component\Security\Core\Security;

    class 
    AdminMaintenanceAccessVoter extends Voter
    {
        private 
    $security;

        public function 
    __construct(Security $security)
        {
            
    $this->security $security;
        }

        protected function 
    supports(string $attribute$subject)
        {
            
    // Abstain, if we are not voting for maintenance back end module access
            
    if ('maintenance' !== $subject || $attribute !== ContaoCorePermissions::USER_CAN_ACCESS_MODULE) {
                return 
    false;
            }

            
    // Get the currently logged in user
            
    $user $this->security->getUser();

            
    // Abstain, if not back end admin
            
    if (!$user instanceof BackendUser || !$user->isAdmin) {
                return 
    false;
            }

            return 
    true;
        }

        protected function 
    voteOnAttribute(string $attribute$subjectTokenInterface $token)
        {
            
    // Get the currently logged in user
            
    $user $token->getUser();

            
    // Only allow admin with ID "1"
            
    return === (int) $user->id;
        }

    Docs PR: https://github.com/contao/docs/pull/919
    Geändert von Spooky (28.12.2021 um 01:42 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das stelle ich mir mir schwer vor, egal um welches Framework es sich handelt
    Zitat Zitat von Spooky Beitrag anzeigen
    Wie auch immer, hier das Beispiel als Voter:
    PHP-Code:
    // src/Security/Voter/AdminMaintenanceAccessVoter.php
    namespace App\Security\Voter;

    use 
    Contao\BackendUser;
    use 
    Contao\CoreBundle\Security\ContaoCorePermissions;
    use 
    Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
    use 
    Symfony\Component\Security\Core\Authorization\Voter\Voter;
    use 
    Symfony\Component\Security\Core\Security;

    class 
    AdminMaintenanceAccessVoter extends Voter
    {
        private 
    $security;

        public function 
    __construct(Security $security)
        {
            
    $this->security $security;
        }

        protected function 
    supports(string $attribute$subject)
        {
            
    // Abstain, if we are not voting for maintenance back end module access
            
    if ('maintenance' !== $subject || $attribute !== ContaoCorePermissions::USER_CAN_ACCESS_MODULE) {
                return 
    false;
            }

            
    // Get the currently logged in user
            
    $user $this->security->getUser();

            
    // Abstain, if not back end admin
            
    if (!$user instanceof BackendUser || !$user->isAdmin) {
                return 
    false;
            }

            return 
    true;
        }

        protected function 
    voteOnAttribute(string $attribute$subjectTokenInterface $token)
        {
            
    // Get the currently logged in user
            
    $user $token->getUser();

            
    // Only allow admin with ID "1"
            
    return === (int) $user->id;
        }

    Docs PR: https://github.com/contao/docs/pull/919
    Eben. Ich muß mich also erst mehrere Wochen oder Monate intensiv mit Symfony beschäftigen, um so etwas Banales wie das Ausblenden eines Backend-Moduls coden zu können. Das ist weit weg von "Code zum Anfassen", wie mein Code-Beispiel im Eingangsposting. Von Deinem Code-Beispiel verstehe ich das einfache PHP, aber für das ganze use-Gedöns, das Extenden und die Funktionsparameter (z.B. "TokenInterface $token" - was in Gottes Namen ist TokenInterface?) muß ich erstmal einen 6-monatigen PHP-Kurs für Fortgeschrittene machen.

    Ich würde jetzt im Blindflug Deinen Code bei mir einbauen, in der Hoffnung das nichts crasht. Und wenn ich noch was einbauen will (ich soll jetzt das Nachrichten-Modul für einen Admin ausblenden), wüßte ich gar nicht genau, was ich an Deinem Code ändern müßte.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    um so etwas Banales wie das Ausblenden eines Backend-Moduls coden zu können.
    Definiere was genau für dich "banal" ist.


    Zitat Zitat von Samson1964 Beitrag anzeigen
    aber für das ganze use-Gedöns
    use statements sind ein normales PHP Feature und haben nichts mit Symfony an sich zu tun.



    Zitat Zitat von Samson1964 Beitrag anzeigen
    muß ich erstmal einen 6-monatigen PHP-Kurs für Fortgeschrittene machen.

    Ich würde jetzt im Blindflug Deinen Code bei mir einbauen, in der Hoffnung das nichts crasht. Und wenn ich noch was einbauen will (ich soll jetzt das Nachrichten-Modul für einen Admin ausblenden), wüßte ich gar nicht genau, was ich an Deinem Code ändern müßte.
    Wenn man PHP programmieren will, muss man halt PHP programmieren können. Ich weiß nicht genau was du dir erwartest.
    Geändert von Spooky (29.12.2021 um 22:48 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  10. #10
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wenn man PHP programmieren will, muss man halt PHP programmieren können.
    Ich glaube das "Problem" ist die komplexere Arbeitsweise bzw. nötige Hintergrundwissen, welche mit Contao 4 mit dem Symfony-Unterbau hinzu gekommen ist. In Contao 2 und 3 ist man mit etwas "Spaghetti-Code" recht weit gekommen, sich sein Contao anzupassen. Inzwischen ist mehr OOP angesagt und eben das Symfony-Framework.

    Für "Hobby-Programmierer" - damit meine ich all die, die damit nicht ihren Lebensunterhalt bestreiten - sicher eine Herausforderung. Ich kenne auch einige Agenturen, die sich damit schwer tun. Bis C4 waren viele Anpassungen noch von der "Grafikabteilung" bestreitbar - da wird die Luft inzwischen dünner...

  11. #11
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Ich glaube das "Problem" ist die komplexere Arbeitsweise bzw. nötige Hintergrundwissen, welche mit Contao 4 mit dem Symfony-Unterbau hinzu gekommen ist. In Contao 2 und 3 ist man mit etwas "Spaghetti-Code" recht weit gekommen, sich sein Contao anzupassen. Inzwischen ist mehr OOP angesagt und eben das Symfony-Framework.

    Für "Hobby-Programmierer" - damit meine ich all die, die damit nicht ihren Lebensunterhalt bestreiten - sicher eine Herausforderung. Ich kenne auch einige Agenturen, die sich damit schwer tun. Bis C4 waren viele Anpassungen noch von der "Grafikabteilung" bestreitbar - da wird die Luft inzwischen dünner...
    Genau so ist es. Das ganze Framework-Gedöns im Hintergrund und die vielen neuen Möglichkeiten mit PHP 7/8 überfordern einen Hobby-Programmierer wie mich. Müßte ich damit mein Geld verdienen, müßte ich mich täglich in PHP und den Frameworks weiterbilden. Aber meine hauptberufliche Aufgabe bleibt die Öffentlichkeitsarbeit und die Administration von Webseiten. Dank meiner (einfachen) PHP-Kenntnisse (und ohne je einen Kurs gemacht zu haben) kann ich kleinere PHP-Projekte schon mal allein verwirklichen. Das war in Contao 3 noch relativ einfach, nachdem ich die ersten Hürden gemeistert habe. Die Hürden in Contao 4 sind ungleich höher. Für PHP-Profis mag alles einfacher geworden sein. Für PHP-Amateure wie mich, baut sich ein Riesenberg an unbekannten Sachen auf. Zum Glück kann man noch vieles in Contao 4 mit Spaghetti-Code realisieren. Leider scheitere ich jetzt wohl an so einfachen Sachen wie
    PHP-Code:
    unset($GLOBALS['BE_MOD']['maintenance']); // Blende mir das Modul Systemwartung aus 
    Stattdessen muß ich versuchen, den aufgeblähten Code wie den von Spooky zu verstehen, wo ich noch überhaupt keine Programmlogik erkennen kann. Wahrscheinlich fehlt auch noch der Schlüssel(-Code) zu dieser Klasse: "Rufe die Funktion AdminMaintenanceAccessVoter::supports in Deiner config.php auf, um die Systemwartung auszublenden."
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  12. #12
    Contao-Fan Avatar von Fehrmann
    Registriert seit
    04.07.2009.
    Ort
    Wismar
    Beiträge
    580
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hi,

    um auf die ursprüngliche Frage zurückzukommen. Versuche es mal mit:

    Code:
    unset($GLOBALS['BE_MOD']['system']['maintenance']);
    Viele Grüße
    René
    Software-Entwickler Backend/Frontend

  13. #13
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von Fehrmann Beitrag anzeigen
    Hi,

    um auf die ursprüngliche Frage zurückzukommen. Versuche es mal mit:

    Code:
    unset($GLOBALS['BE_MOD']['system']['maintenance']);
    Viele Grüße
    René
    Danke, das wars!
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  14. #14
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Eben. Ich muß mich also erst mehrere Wochen oder Monate intensiv mit Symfony beschäftigen, um so etwas Banales wie das Ausblenden eines Backend-Moduls coden zu können. Das ist weit weg von "Code zum Anfassen", wie mein Code-Beispiel im Eingangsposting. Von Deinem Code-Beispiel verstehe ich das einfache PHP, aber für das ganze use-Gedöns, das Extenden und die Funktionsparameter (z.B. "TokenInterface $token" - was in Gottes Namen ist TokenInterface?) muß ich erstmal einen 6-monatigen PHP-Kurs für Fortgeschrittene machen.

    Ich würde jetzt im Blindflug Deinen Code bei mir einbauen, in der Hoffnung das nichts crasht. Und wenn ich noch was einbauen will (ich soll jetzt das Nachrichten-Modul für einen Admin ausblenden), wüßte ich gar nicht genau, was ich an Deinem Code ändern müßte.
    Du drehst Dich im Kreis - siehe Dein Posting in https://community.contao.org/de/show...l=1#post507089

    "Contao" hat einen bestimmten Weg eingeschlagen der mehr oder weniger auch zur Diskussion stand - damals war neben Symfony auch noch Yii und glaube Laravel im Fokus.

    Die Würfel sind nun aber geworfen und Du bzw. Deine Projekte müssen sich damit arrangieren. Das kann auch zu einem Wechsel zu einem anderen CMS führen. Ich persönlich finde das nicht schlimm. Die spannende Frage wäre, was da in Frage kommen könnte? Bei vielen "Alternativen" kommst Du wahrscheinlich von Regen in die Traufe (T3, Joomla, Drupal, Neo...) - was bleibt dann noch? WP, Websitebaker, Redaxo...?

  15. #15
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Hallo Samson

    Ich möchte dir Mut machen. Ich bin auch Hobby Programmierer. Die Umstellung auf Contao 4 war ein riesen Schritt. Aber für mich hat er sich definitiv gelohnt. Mit Symfony hat sich für mich eine neue Welt aufgetan, wo ich jeden Tag etwas Neues dazulernen kann. Hat man das Grundprinzip einmal verstanden, sind die Möglichkeiten fast grenzenlos. Einmal mehr ein grosses Dankeschön allen Corentwicklern für diesen damals mutigen Schritt und für die vielen Stunden Arbeit. Ich wünsche dir viel Kraft und eine grosse Portion Neugier, so dass du den Sprung auf Contao 4 packst.

    Mit lieben Grüssen

    Marko
    Geändert von markocupic (03.01.2022 um 08:28 Uhr)
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •