Contao-Camp 2024
Ergebnis 1 bis 21 von 21

Thema: Unterseite je nach Gruppenzugehörigkeit die Inhalte variieren

  1. #1
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Frage Unterseite je nach Gruppenzugehörigkeit die Inhalte variieren

    Hallo,
    ich verzweifel gerade etwas, da ich seit dem Update von 4.4 auf 4.9 meine Unterseite nicht mehr funktioniert und ich irgendwie nicht das richtige finde.


    Ich habe eine Unterseite auf der Daten aus einer DB dargestellt werden.
    Wenn man zur Usergruppe1 gehört sieht man nur die Inhalte 1-10.
    Ist man in der Usergruppe2 sieht man die Inhalte 1-10 und zusätzlich noch die 11-20.
    (Vereinfacht dargestellt)

    In der Version 4.4 habe ich aus der Tabelle "tl_session" gelesen wer ich bin und gerade eingeloggt bin und aus der Tabelle "tl_member" über meine ID ausgelesen zu welcher Gruppe ich gehöre.

    Wie komme ich nun an meine UserID? Denn die Tabelle "tl_session" gibt es ja nicht mehr

    Gibt es irgendwo eine Anleitung für Anfänger? *g*
    Geändert von avus (07.11.2022 um 12:56 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Gesicht zeigt die Zunge

    Keiner hier im Forum der mir helfen kann an die Frontend User ID zu kommen?
    Oder zumindest mich auf den richtigen Weg schubsen kann?

  3. #3
    Contao-Nutzer
    Registriert seit
    10.06.2021.
    Beiträge
    237
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wieso so kompliziert über tl_session?
    Über
    PHP-Code:
    $user FrontendUser::getInstance();
    $user->groups 
    bekommst du die Gruppen des Users.

  4. #4
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von lbableck Beitrag anzeigen
    Wieso so kompliziert über tl_session?
    Über
    PHP-Code:
    $user FrontendUser::getInstance();
    $user->groups 
    bekommst du die Gruppen des Users.
    Die Variante ist mir prinzipiell egal
    Gerne mache ich das auf anderem Wege.

    Wenn ich das im Controller einfüge wo früher die DB geprüft wurde bekomme ich folgende Meldung:
    Code:
    Attempted to load class "FrontendUser" from namespace "Avus\TestBundle\Controller".
    Did you forget a "use" statement for another namespace?
    Was muss ich denn für ein "use" einbinden? Sorry aber ich bin noch nicht so gut da drin

  5. #5
    Contao-Nutzer
    Registriert seit
    10.06.2021.
    Beiträge
    237
    Contao-Projekt unterstützen

    Support Contao

    Standard

    PHP-Code:
    use Contao\FrontendUser

  6. #6
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von lbableck Beitrag anzeigen
    PHP-Code:
    use Contao\FrontendUser
    Ja nun wieder etwas weiter, danke.
    Aber da scheint wohl nichts drin zu stehen

    Code:
    Call to a member function get() on null
    Aber ich bin auf der Seite angemeldet...

  7. #7
    Contao-Nutzer
    Registriert seit
    10.06.2021.
    Beiträge
    237
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wo rufst du denn da eine get() Function auf?
    Poste am besten mal den ganzen Code.

  8. #8
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Also das ist die Funktion welche ausgeführt wird und früher die DB abgefragt hatte:

    Nun habe ich eigentlich nur deinen Code drin und eine Konsolen Ausgabe davon.
    Unten das $test ist um zu prüfen ob es prinzipiell noch geht wenn ich die Gruppen hätte


    PHP-Code:
        public function getAuthenticatedFrontEndUser()
        {
            /*
                $sessionHash = $this->request->cookies->get('FE_USER_AUTH');
                $em = $this->getDoctrine()->getManager('default');
                $subquery = $em->getConnection()->prepare("
                        SELECT tl_member.*
                        FROM tl_member
                        JOIN tl_session
                        ON tl_member.id = tl_session.pid
                        WHERE tl_session.hash = :sessionHash");
                $subquery->bindValue('sessionHash', $sessionHash);
                $subquery->execute();
                return $subquery->fetch();
            */
            
                
                
                $user = FrontendUser::getInstance();
                
         
                ?>
                <script>
                console.log(<?= json_encode($user->groups); ?>);
                </script>
                <?php
            
                $test
    ['groups'] = "a:3:{i:0;s:1:\"2\";i:1;s:1:\"1\";i:2;s:1:\"3\";}";
                return 
    $test;
        }

  9. #9
    Contao-Nutzer
    Registriert seit
    10.06.2021.
    Beiträge
    237
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hm, da ist jetzt eigentlich nichts drin, was diesen Fehler verursachen sollte.
    Kannst du dir mal im Debug-Modus den Fehler ansehen? Dort siehst du auch wo genau der Fehler auftritt.

  10. #10
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Findet wohl genau in dieser Zeile statt:

    fehler.png

    Hilft das? bzw was benötigst du von mir?

    Sorry

  11. #11
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Also das GET welches fehlschlägt ist in der Contao Datei:

    Code:
    vendor/contao/core-bundle/src/Resources/contao/classes/FrontendUser.php
    in der Zeile 89:

    Code:
    $objToken = System::getContainer()->get('security.token_storage')->getToken();
    Der bekommt wohl da den User nicht zurück

  12. #12
    Contao-Nutzer
    Registriert seit
    10.06.2021.
    Beiträge
    237
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Der Container ist da anscheinend null, aber da bin ich grade auch überfragt...

  13. #13
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Ok, schade... trotzdem danke für den Versuch.


    Vielleicht hat jemand anderes noch eine Idee?

  14. #14
    Contao-Nutzer
    Registriert seit
    11.03.2012.
    Ort
    Riehen, CH
    Beiträge
    27

    Standard

    Hallo,

    Leider kenne ich mich mit DB auslesen etc. nicht so aus.

    Ich Arbeite nur mit der Core-Funktion des Zugriff-Schutzes.

    Dort kann man Seiten, Artikel und Elemente einzeln schützen und Mitgliedergruppen zuweisen.

    Falls es nicht viele Unterseiten sind, wäre eine solche Umstellung denkbar...

    Schöne Grüsse Christian

  15. #15
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    So wie ich das sehe nutzt du den Schnipsel in einem Bundle?

    Wenn du den Teil z.B. in einem FE Template nutzt, wird es sicherlich gehen.

    Bei dir im Controller würde ich mir den User wahrscheinlich anders holen. Die Frage ist dann, wann/wo du deinen Controller aufrufst.

    z.B. sowas:

    PHP-Code:
    try {
        
    $user $this->userProvider->loadUserByIdentifier($username);
    } catch (
    UsernameNotFoundException $exception) {
        throw new 
    PageNotFoundException('We don\'t know who you are :-(');
    }

    if (!
    $user instanceof FrontendUser) {
        throw new 
    AccessDeniedException('Not a frontend user');

    Wir sind Contao-Sponsor :-)

  16. #16
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von snoks7 Beitrag anzeigen
    Hallo,

    Leider kenne ich mich mit DB auslesen etc. nicht so aus.

    Ich Arbeite nur mit der Core-Funktion des Zugriff-Schutzes.

    Dort kann man Seiten, Artikel und Elemente einzeln schützen und Mitgliedergruppen zuweisen.

    Falls es nicht viele Unterseiten sind, wäre eine solche Umstellung denkbar...

    Schöne Grüsse Christian
    Muss nicht aus DB kommen, aber ja müsste man sich vielleicht auch überlegen. Wäre aber auch viel arbeit da es an vielen Stellen so genutzt wird.



    Zitat Zitat von paddibr Beitrag anzeigen
    So wie ich das sehe nutzt du den Schnipsel in einem Bundle?

    Wenn du den Teil z.B. in einem FE Template nutzt, wird es sicherlich gehen.

    Bei dir im Controller würde ich mir den User wahrscheinlich anders holen. Die Frage ist dann, wann/wo du deinen Controller aufrufst.

    z.B. sowas:

    PHP-Code:
    try {
        
    $user $this->userProvider->loadUserByIdentifier($username);
    } catch (
    UsernameNotFoundException $exception) {
        throw new 
    PageNotFoundException('We don\'t know who you are :-(');
    }

    if (!
    $user instanceof FrontendUser) {
        throw new 
    AccessDeniedException('Not a frontend user');

    Ja das wird in einem Bundle aufgerufen, aber leider kommt die Grundinstallation nicht von mir und ich komme nicht mehr an die alte Programmiererin ran

    Aber wenn ich richtig verstehe, dann wird der Controller vor dem laden der eigentlichen Tabelle aufgerufen.
    Leider kann ich also dir nicht so genau sagen wann aufgerufen wird.

    Ist halt so dass diese Tabelle und andere ähnliche Seiten dynamisch je nach Gruppe anderst aufgebaut wird.
    Und ich zu doof bin einen User auszulesen
    Hatte mir das wirklich nicht so schwierig vorgestellt an einen User zu kommen...

    Hast du eine einfache Lösung wie ich im Controller da ran kommen könnte?
    Bzw nach was muss ich bei Tante G suchen...

  17. #17
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    Okay, aber wenn das unter 4.4 lief, dann muss da ja schon irgendwo passieren?! Da wird es sicherlich Änderungen gegeben haben die einfach nur entsprechend an das Update angepasst werden müssen.

    Die neue Methode für getInstance ist ja diese:

    PHP-Code:
    $hasFrontendUser System::getContainer()->get('contao.security.token_checker')->hasFrontendUser(); 
    https://docs.contao.org/dev/reference/services/ (ganz unten)

    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); 
    Geändert von paddibr (08.11.2022 um 12:04 Uhr)
    Wir sind Contao-Sponsor :-)

  18. #18
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von paddibr Beitrag anzeigen
    Okay, aber wenn das unter 4.4 lief, dann muss da ja schon irgendwo passieren?! Da wird es sicherlich Änderungen gegeben haben die einfach nur entsprechend an das Update angepasst werden müssen.

    Die neue Methode für getInstance ist ja diese:

    PHP-Code:
    $hasFrontendUser System::getContainer()->get('contao.security.token_checker')->hasFrontendUser(); 
    ...

    Also bei 4.4 lief es sauber ja...

    Das was du nun geschrieben hast geht das schon bei 4.9 oder muss ich da auf 4.13 updaten? (Was sowieso mein nächstes Ziel wäre)
    Fand das bei Neuerungen vom 4.13

    Bei mir vermisst er wieder einen Namespace den ich nicht weiß. (Falls mit 4.9 überhaupt geht)
    Wie bekomme ich denn sowas immer raus?

  19. #19
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    müsste ab 4.9 gehen. Welchen?

    PHP-Code:
    use Contao/System 
    Ich schau mir das meistens im GitHub von Contao an.
    Wir sind Contao-Sponsor :-)

  20. #20
    Contao-Nutzer
    Registriert seit
    17.07.2013.
    Beiträge
    77

    Standard

    Zitat Zitat von paddibr Beitrag anzeigen
    müsste ab 4.9 gehen. Welchen?

    PHP-Code:
    use Contao/System 
    Ich schau mir das meistens im GitHub von Contao an.
    Ah das muss ich mir merken mit GitHub...

    Aber nun ist er zwar mit Namespace zufrieden, aber ich lande wieder beim Fehler:

    "Call to a member function get() on null" welcher nun direkt bei deinen Beispielen geworfen wird

  21. #21
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    Ja, dann wirst du an der Stelle keinen User zur Verfügung haben - soweit ich das einschätzen kann. Dafür fehlt mir leider der Überblick.
    Wir sind Contao-Sponsor :-)

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
  •