Contao-Camp 2024
Ergebnis 1 bis 36 von 36

Thema: Methode für Backend / Frontend / User abprüfen

  1. #1
    Contao-Nutzer Avatar von darki777
    Registriert seit
    03.07.2009.
    Beiträge
    63

    Standard Methode für Backend / Frontend / User abprüfen

    Hi,
    habe jetzt eben die halbe API (library) von TL durchgerattert, allerdings finde ich keine Methode in der ich überprüfen kann ob man im Backend oder Frontend eingeloggt ist oder nicht, ggf. noch ob er als Admin eingeloggt ist oder nicht. Das einzige was ich bisher fand, war nur eine Methode bei der ich abprüfen kann ob der User von der Gruppe XYZ stammt oder nicht. Weis jemand wie die Methode(n) lauten könnte(n)? Notfalls Workaround? Danke.

    Gruß,
    darki
    ioCron - Web & Mobile Development, Webdesign - Unternehmen in Passau
    ioCron Twitter - Folgen und auf dem neuesten Stand bleiben

  2. #2
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Hi darki,
    die Klasse frontend kennt die Methode getLoginStatus (boolean), prüft ob ein BE oder FE User angemeldet ist.

    Zumindest für's BE (FE weiß ich nicht) steht User->isAdmin zur Verfügung (guck z.B. mal im Newsmodul > dca > tl_news, Zeile 391). API hab ich hierüber allerdings nichts gefunden.

    Hoffe das hilft schon mal bißchen...


    cheers
    Antipitch
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  3. #3
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Dies könnte dir nützlich sein:

    Code:
            if (TL_MODE == 'FE')
            {
                $this->import('FrontendUser', 'Member');
                if (FE_USER_LOGGED_IN)
                {
                   $memberId = $this->Member->id;
                }
                else
                {
                   $memberId = 0;
                }
            }

  4. #4
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Dani's aussage stimmt:

    PHP-Code:
    if (FE_USER_LOGGED_IN)
    {
        echo 
    'frontend angemeldet'
    }

    if (
    BE_USER_LOGGED_IN)
    {
        echo 
    'backend angemeldet'

    Beachten dass die Konstanten sind und keine Variablen, $ ist also nicht nötig. Ausserdem können beide Optionen aktiv sein, wenn der Backend-Benutzer die Frontend-Vorschau aufruft, einen Benutzer auswählt und "versteckte Elemente anzeigen" wählt.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  5. #5
    Contao-Nutzer
    Registriert seit
    07.08.2009.
    Beiträge
    9

    Standard

    Habe versucht die Konstante BE_USER_LOGGED_IN in meinem Frontend-Modul (TL-Version 2.8.2) zu verwenden, hat aber leider nicht funktioniert.

    PHP-Code:
    if(BE_USER_LOGGED_IN) echo 'Backend-User ist eingeloggt!'
    Muss hier vorher noch etwas importiert werden?

  6. #6
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Standard

    Meines Wissens geht das nicht, du kannst nur im Frontend nach Mitgliedern prüfen und im Backend nach Benutzern, zumindest wenn du über die Konstanten gehst,
    die sind ja gesetzt wenn der aktuelle Nutzer der die Seite aufruft eingeloggt ist.

    Es ist natürlich möglich, mein Modul backend_user_online ist zwar ein Backend Modul, zeigt aber von allen Mitgliedern und Benutzern an ob diese online sind. (mit leichter Unschärfe)
    Geändert von BugBuster (16.05.2010 um 18:19 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  7. #7
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von billy Beitrag anzeigen
    Habe versucht die Konstante BE_USER_LOGGED_IN in meinem Frontend-Modul (TL-Version 2.8.2) zu verwenden, hat aber leider nicht funktioniert.

    PHP-Code:
    if(BE_USER_LOGGED_IN) echo 'Backend-User ist eingeloggt!'
    Muss hier vorher noch etwas importiert werden?
    Zitat Zitat von andreas.schempp Beitrag anzeigen
    Ausserdem können beide Optionen aktiv sein, wenn der Backend-Benutzer die Frontend-Vorschau aufruft, einen Benutzer auswählt und "versteckte Elemente anzeigen" wählt.
    Rufst du das Frontend korrekt auf?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  8. #8
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo, ich muss mich hier nochmal dran hängen.

    Auch ich muss im FE checken, ob im BE ein Benutzer (am besten Admin, aber erstmal egal) eingeloggt ist, und soll dann im Frontend zusätzlich was ausgeben wenn true.

    Ich bin im Template mod_article.xhtml Contao 2.11.10.

    Obwohl im BE als Admin eingeloggt, haben die Konstanten folgende Werte:

    BE_USER_AUTH = 'BE_USER_AUTH'
    BE_USER_LOGGED_IN = bool(false)

    Weiß jemand, wie ich im Template mod_article.xhtml prüfen kann, ob ich im BE eingeloggt bin?
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  9. #9
    Contao-Nutzer
    Registriert seit
    15.03.2010.
    Ort
    AT
    Beiträge
    204

    Standard

    Hallo,

    gibt es bereits eine Lösung dafür?

    Wäre folgendes denkbar?
    Mit dem postLogin Hook und dem postLogout Hook speicher man im tl_user den login_status.
    Man weiß jetzt wann sich ein User einloggt, ausloggt oder ausgeloggt wird.

    In meinem Fall muss ich wissen ob ein Backend User die Frontend Vorschau verwendet.
    Beim LoginHook wird also die PHPSESSIONID mitgespeichert.
    Bei der Frontend Vorschau wird dann überprüft ob der User mit selber PHPSESSIONID eingeloggt ist und Admin ist...

    lg

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das einzige, was ich rausgefunden hatte ist, dass der Marker BE_USER_LOGGED_IN nur dann auf true gesetzt wird, wenn man über den Frontend-Vorschau-Link aufs Frontend geht und dann 'Unveröffentlichte Elemente anzeigen' aktiviert. Finde ich ein bisschen doof jetzt, müsste man vielleicht mal ein Ticket zu erstellen.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    Ich kann nur auf diese Zeile verwiesen:
    https://github.com/contao/core/blob/...ogle.html5#L12

    Allerdings nur als Admin User getestet. Was als anderer BE User passiert keine Ahnung .
    Wichtig ist vermutlich die Cookie Abfrage, welche ganz hinten drin steht.
    Mein Blog -> brothers-project.de

  12. #12
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wie gesagt, BE_USER_LOGGED_IN ist false, wenn du im BE eingeloggt bist. Nur über die FE-Vorschau mit "unveröffentlichte anzeigen" aktiviert ist es true.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  13. #13
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    Ich meine diesen Teil speziell:
    PHP-Code:
    sha1(session_id() . (!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? Environment::get('ip') : '') . 'BE_USER_AUTH') != Input::cookie('BE_USER_AUTH'
    Der geht auch nicht?
    Mein Blog -> brothers-project.de

  14. #14
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ist ja ne UND Verknüpfung und die Konstante BE_USER_AUTH ist string 'BE_USER_AUTH'. Das heißt, in deinem Beispiel müsste Analytics auch ausgeführt werden, wenn du im BE eingeloggt bist, halt nur nicht, wenn du über die FE-Vorschau mit unv. anzeigen gehst.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  15. #15
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Ist ja ne UND Verknüpfung und die Konstante BE_USER_AUTH ist string 'BE_USER_AUTH'. Das heißt, in deinem Beispiel müsste Analytics auch ausgeführt werden, wenn du im BE eingeloggt bist, halt nur nicht, wenn du über die FE-Vorschau mit unv. anzeigen gehst.
    Hi Andreas,

    kann ich nicht bestätigen. Dieser Code funktioniert. Ich bin im Backend angemeldet und rufe die Seite ohne Preview auf. Das script wird nicht ausgegeben.

    Zuersteinmal wird ein sha1 hash erzeugt indem geprüft wird ob das array $GLOBALS['TL_CONFIG'] existiert mit der aktuellsten session ID und dem String BE_USER_AUTH
    PHP-Code:
    sha1(session_id() . (!$GLOBALS['TL_CONFIG'] ? Environment::get('ip') : '') . 'BE_USER_AUTH'
    Dann wird abgefragt ob das ganze nicht gleich dem Im Cookie gespeicherten Wert ist
    PHP-Code:
     != Input::cookie('BE_USER_AUTH'
    Ich verstehe dein Problem nicht. Bei mir geht es ob mit Frontend Preview oder ohne. Ebenso wird hier keine Konstante abgefragt... 'BE_USER_AUTH' ist ein String. Teste es einfach mal. Es muss gehen
    Geändert von Zero (08.08.2014 um 12:23 Uhr)
    Mein Blog -> brothers-project.de

  16. #16
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, ok, da hast du Recht, da habe ich mich von der Schreibweise irreführen lassen. BE_USER_AUTH gibt es nicht als Konstante.

    Aber mich wunderte eben die Konstante BE_USER_LOGGED_IN, die besser BE_USER_SHOW_UNRELEASED heißen sollte.

    Denn für die Überprüfung im FE reicht tatsächlich das hier
    PHP-Code:
    if(sha1(session_id().(!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? Environment::get('ip') : '').'BE_USER_AUTH') != Input::cookie('BE_USER_AUTH')) {
      
    // code here

    Und in der Abfrage verstehe ich das "&& !BE_USER_LOGGED_IN" nicht. Wenn ich das entferne, habe ich das gleiche Ergebnis. Oder hat das was mit "$GLOBALS['TL_CONFIG']['disableIpCheck']" zu tun?

    Auf jeden Fall finde ich die Konstante unglücklich und irreführend gewählt.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  17. #17
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hier noch die Version für Contao 2.11.10
    PHP-Code:
    $this->Import('Environment');
    if(
      (
    sha1(session_id().(!$GLOBALS['TL_CONFIG']['disableIpCheck'] ? $this->Environment->ip '').'BE_USER_AUTH') == $this->Input->cookie('BE_USER_AUTH')) {
      
    // Code here

    Achtung hier habe ich == benutzt, also Prüfung, ob BE User eingeloggt ist, im Post zuvor war es != - prüfen, ob er nicht eingeloggt ist.

    edit:
    Code, den ich für Contao 3.5 benutze
    PHP-Code:
    if(sha1(session_id().(!Config::get('disableIpCheck') ? Environment::get('ip') : '').'BE_USER_AUTH') == Input::cookie('BE_USER_AUTH'))
    {
      
    $beUserLoggedIn true;

    Geändert von Andreas (09.09.2015 um 13:16 Uhr)
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

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

    Standard

    Für eine einfache Abfrage, ob ein BE-Benutzer eingeloggt ist, nutze ich in meinem Modul folgenden Code:
    PHP-Code:
    $objSession $this->Database->prepare('SELECT * FROM tl_session WHERE sessionID=?')->execute(session_id());
    if(
    $objSession->name == 'BE_USER_AUTH')
    {
      
    // Session-ID gehört einem eingeloggtem BE-Benutzer

    Ist im Frontend des gleichen Browsers ein Mitglied eingeloggt, gibt es einen weiteren Datensatz mit der gleichen Session-ID, der in der Spalte name = 'FE_USER_AUTH' enthält. Deshalb ist vielleicht die (Auswertung der) Abfrage nicht ganz sauber, denn 'FE_USER_AUTH' kann bereits im ersten zurückgegebenen Datensatz stehen. Besser also:
    PHP-Code:
    $objSession $this->Database->prepare('SELECT * FROM tl_session WHERE name=? AND sessionID=?')->execute('BE_USER_AUTH'session_id()); 
    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

  19. #19
    Contao-Fan
    Registriert seit
    26.06.2009.
    Beiträge
    266

    Standard

    Die hier vorgestellten Lösungsanätze funktionieren bei mir in der aktuellen Contao-Version nicht.

    Den Umweg über die "Frontend-Vorschau > Unveröffentlichte Elemente: anzeigen" finde ich nicht gut, da ich versteckte Inhalte dem Redakteur nicht anzeigen möchte.

    Ich habe das Problem in Contao 3.4.5 derzeit so für mich gelöst:

    PHP-Code:
    <?php if ($GLOBALS['_COOKIE']['BE_USER_AUTH']): ?>
    BE-User oder Admin ist eingeloggt
    <?php endif; ?>
    Geändert von minstyle (17.04.2015 um 15:33 Uhr)

  20. #20
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard

    Danke
    Weiß auch jemand wie man bei Multidomain Installationen überprüft, ob jemand als Backend-User eingeloggt ist?
    Da funktioniert $GLOBALS['_COOKIE']['BE_USER_AUTH'] nämlich nicht.
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  21. #21
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    @Stranger

    Ich habe oben meinen Code für Conao 3.5 hinzugefügt. https://community.contao.org/de/show...l=1#post277111

    Für Multidomains weiß ich auf Anhieb auch nicht, außer, dass du versuchen kannst dich mit einer der Multidomains im BE einzuloggen.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  22. #22
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    @Stranger schau mal hier: https://community.contao.org/de/show...reifend-nutzen

    Generell ist ein Cookie an eine Domain gebunden.
    Alternative wäre die Session als GET Parameter übergeben.
    Mein Blog -> brothers-project.de

  23. #23
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    131

    Standard

    Bis Contao 4.4 habe ich über

    PHP-Code:
     if(sha1(session_id().(!Config::get('disableIpCheck') ? Environment::get('ip') : '').'BE_USER_AUTH') == Input::cookie('BE_USER_AUTH')){ } 
    abgefragt, ob der Benutzer im Backend eingeloggt ist.
    Mit 4.8 funktioniert es nicht mehr.


    Kann mir Jemand helfen?
    Nutze es im Template mod_article.html5, um dem Contao Nutzer einen Link zum passenden Artikel bereit zu stellen für etwas einfacheres pflegen.

  24. #24
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Contao 4.8 verwendet Symfony Security, nicht mehr die Zeilen aus Contao 3. Etwa so müsste es gehen:

    PHP-Code:
     if (System::getContainer()->get('contao.security.token_checker')->hasBackendUser()) { } 
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  25. #25
    Contao-Nutzer
    Registriert seit
    15.03.2010.
    Ort
    AT
    Beiträge
    204

    Standard Contao 4.13

    Is Backend-User:

    PHP-Code:
    $security System::getContainer()->get('security.helper'); 
    if (
    $security->isGranted('ROLE_ADMIN')){} 
    Backend-User ist eingeloggt:
    PHP-Code:
    $objTokenChecker = \System::getContainer()->get('contao.security.token_checker');
    if (
    $objTokenChecker->hasBackendUser()) {} 
    Frontend-User ist eingeloggt:
    PHP-Code:
    $objTokenChecker = \System::getContainer()->get('contao.security.token_checker');
    if (
    $objTokenChecker->hasFrontendUser()) {} 
    Frontend-User gehört zur Gruppe:
    PHP-Code:
    $security System::getContainer()->get('security.helper'); 
    $security->isGranted('contao_member.groups'$idDerGruppe); 

  26. #26
    Contao-Nutzer
    Registriert seit
    15.03.2010.
    Ort
    AT
    Beiträge
    204

    Standard

    Folgendes funktioniert zwar im Backend, beim System-Update oder beim Cache leeren (und WARMUP) im Manager verursacht es aber einen Error.

    PHP-Code:
    $security System::getContainer()->get('security.helper'); 
    if (
    $security->isGranted('ROLE_ADMIN')){
        echo 
    "zB. Neu Button nur bei Admins anzeigen";

    Fehler beim Cache WARMUP (DEV und PROD)


    HTML-Code:
    CRITICAL  [console] Error thrown while running command "cache:warmup --env=dev". Message: "The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL." ["exception" => Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException { …},"command" => "cache:warmup --env=dev","message" => "The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL."]
    In AuthorizationChecker.php line 74:
                                                                                   
      The token storage contains no authentication token. One possible reason may  
       be that there is no firewall configured for this URL.                       
                                                                                   
    cache:warmup [--no-optional-warmers]
    Also verwende ich weiterhin:
    PHP-Code:
    $objUser BackendUser::getInstance();
    if(
    $objUser->isAdmin){} 

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

    Standard

    Wo genau hast du diesen Code verwendet?
    » sponsor me via GitHub or PayPal or Revolut

  28. #28
    Contao-Nutzer
    Registriert seit
    15.03.2010.
    Ort
    AT
    Beiträge
    204

    Standard

    Im eigenen tl_article.php um z.B

    PHP-Code:
    $objUser BackendUser::getInstance();
    if(!
    $objUser->isAdmin){
        
    $GLOBALS['TL_DCA']['tl_article']['config']['closed'] = false;

    PHP-Code:
    # Erzeugt den Fehler
    $security System::getContainer()->get('security.helper'); 
    if (!
    $security->isGranted('ROLE_ADMIN')){
        
    $GLOBALS['TL_DCA']['tl_article']['config']['closed'] = false;

    Nicht im Callback sondern einfach im SpagettiCode..

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

    Standard

    Das darfst du nicht machen. Nutze einen Callback mit Dependency Injection.
    » sponsor me via GitHub or PayPal or Revolut

  30. #30
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Hi Leute,
    eine Frage. Warum loggt Contao (4.13) direkt aus, wenn man ein Recht direkt abfragt.

    Beispiel für die Rechte-Abfrage direkt auf ein Formular (id=1) (angewendet in einem loadDataContainer Hook Callback)

    ...
    PHP-Code:
    System::importStatic(BackendUser::class,'User');

    $security System::getContainer()->get('security.helper');
    $hasAccess $security->isGrantedContaoCorePermissions::USER_CAN_ACCESS_FORM,); // Contao loggt aus 
    Contao loggt direkt aus. Ein weiterer Login ist nicht mehr möglich, ausser man kommentiert die isGranted Abfrage wieder aus. Auch die Kappselung in eine vorherige "Backend-Logged In" Abfrage ändert nichts.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

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

    Standard

    Poste den gesamten Code.
    » sponsor me via GitHub or PayPal or Revolut

  32. #32
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Hi,

    config.php
    PHP-Code:
    $GLOBALS['TL_HOOKS']['loadDataContainer'][]    = array('PCT\Test','loadDataContainerCallback'); 
    Test.php

    PHP-Code:
    <?php 
        
    namespace PCT;

    use 
    Contao\CoreBundle\Security\ContaoCorePermissions;
    use 
    Contao\System;
    use 
    Contao\BackendUser;

    class 
    Test
    {
        public function 
    loadDataContainerCallback($strTable)
        {
            
    System::importStatic(BackendUser::class,'User');
            
    $security System::getContainer()->get('security.helper');
            
    $hasAccess $security->isGrantedContaoCorePermissions::USER_CAN_ACCESS_FORM,);
        }
    }
    Geändert von Tim G (17.10.2022 um 13:45 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

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

    Standard

    Warum führst du
    PHP-Code:
    System::importStatic(BackendUser::class,'User'); 
    aus? Und statt
    PHP-Code:
    System::getContainer()->get('security.helper'); 
    solltest du Dependency Injection nutzen.
    » sponsor me via GitHub or PayPal or Revolut

  34. #34
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Warum führst du
    PHP-Code:
    System::importStatic(BackendUser::class,'User'); 
    aus? Und statt
    PHP-Code:
    System::getContainer()->get('security.helper'); 
    solltest du Dependency Injection nutzen.
    Mhh... vielleicht fehlt etwas in der Kette.
    Der Code ist quasi ähnlich bzw. gleich dem Contao Core. \tl_content getForms macht es exakt nach diesem Muster bzw. überall wo Rechte abgefragt werden. Die Backend Klasse z.B. quasi exakt nach diesem Muster auch:

    Kannst du ein Beispiel geben, wie es aussehen sollte. Thx.

    ps. In einem rohen 4.13.12 passt es. Dann wird etwas auf dem Weg dahin hängen. Ich grabe mal tiefer. Danke Dir.

    pps. Es handelt sich wohl um einen redirect beim Öffnen eines dynamisch erstellen Backend-Moduls z.B. durch CustomCatalog erstellt. Hier leitet ->isGranted direkt auf /contao/login um, würde ich sagen. Eine Meldung wird nicht ausgegeben. Führt man ->isGranted nicht aus, läuft alles wie gewohnt.
    Geändert von Tim G (18.10.2022 um 12:35 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  35. #35
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Zur Info woran es gelegen hat und falls jemand mal ein ähnliches Problem hat

    Es kommt auf den Zeitpunkt der Abfrage an. Abfragt wurde im initializeSystem Hook (eine initconfig.php kann zum Test genutzt werden).
    Zu diesem frühen Zeitpunkt wird kein Benutzer gefunden im security helper ($security->getUser()), auch nicht wenn man bereits im Backend angemeldet ist. Damit scheitert die Anfrage auf ->isGranted und leitet auf den Login.

    Zur Info: BackendUser::getInstance() hingegen ist gefüllt.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

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

    Standard

    Für solche Zwecke sollte ein Request Listener benutzt werden (der eine geringere Priorität als die Symfony Firewall hat).
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Frontend Login für Backend User
    Von ZOOTV im Forum Benutzer/-gruppen
    Antworten: 12
    Letzter Beitrag: 12.09.2013, 12:16
  2. User-Frontend-Activity Erweiterung (?)
    Von phreak im Forum Was kann Contao?
    Antworten: 0
    Letzter Beitrag: 27.10.2010, 13:37
  3. Frontend User und Ihre Möglichkeiten
    Von narc im Forum Was kann Contao?
    Antworten: 1
    Letzter Beitrag: 05.03.2010, 09:22
  4. Backend User im Frontend ansprechen
    Von tecilein im Forum Geschützte Bereiche/Mitglieder
    Antworten: 1
    Letzter Beitrag: 30.06.2009, 18:44

Lesezeichen

Lesezeichen

Berechtigungen

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