Contao-Camp 2024
Ergebnis 1 bis 14 von 14

Thema: Mitgliedergruppe in Template prüfen

  1. #1
    Contao-Nutzer
    Registriert seit
    29.06.2021.
    Beiträge
    7

    Frage Mitgliedergruppe in Template prüfen

    Guten Tag,
    ich würde gerne in meinem Template die Mitgliedergruppe des aktuellen Benutzers prüfen.
    Leider hilft mir die Dokumentation nicht wirklich weiter. Ich bin über den "Security" Part gestolpert aber auch der ist nicht gerade hilfreich.

    Kann hier wer helfen? Vielen Dank
    Geändert von Spooky (08.12.2021 um 10:39 Uhr) Grund: added prefix

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

    Standard

    Was genau möchtest du machen? Evt. wäre ein Service das richtige?
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    29.06.2021.
    Beiträge
    7

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Was genau möchtest du machen? Evt. wäre ein Service das richtige?
    Hallo Spooky,
    vielen Dank für deine Antwort.

    Ich möchte im Event Template abfragen ob der Benutzer eingeloggt und welcher Mitgliedergruppe er zugeordnet ist.

    Circa gleich wie ich das in Wordpress machen würde mit:
    PHP-Code:
    $user wp_get_current_user();
    if ( 
    in_array'author', (array) $user->roles ) ) {
        
    //The user has the "author" role

    Ich habe einen Security Service erstellt wie in der Dokumentation, registriert und versucht im Template aufzurufen.
    Gibt aber leider nur den log:
    You have requested a non-existent service

    Code:
      App\Controller\ExampleSecurityCheck:
        public true
        class:'App\Controller\ExampleSecurityCheck'
        tags:
          - controller.service_arguments

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

    Standard

    Meine Frage war eher: was genau soll im Template dann anders sein, wenn das alles zutrifft
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    29.06.2021.
    Beiträge
    7

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Meine Frage war eher: was genau soll im Template dann anders sein, wenn das alles zutrifft
    Achso. Dann soll ein spezieller Text und ein anderer Button angezeigt werden.
    Die Daten für das Event werden alle aus custom Felder der tl_calendar_events geladen.

    Ich weis, das Layout des Events kann man auch mit Inhaltselementen zusammenbauen.
    Jedoch soll am Ende nicht von Inhaltselement zu Inhaltselement navigiert werden müssen nur um ein neues Event zu erstellen.
    Daher würde ich das ganze eigentlich gerne per "simple" if abfrage im template machen. Ist nur doch nicht ganz so simpel wie ich dachte

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

    Standard

    Welche Contao Version?
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    29.06.2021.
    Beiträge
    7

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Welche Contao Version?
    Verwendet wird:
    Version 4.11.9

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

    Standard

    Generell solltest du auf Contao 4.12 aktualisieren, da Contao 4.11 nicht mehr aktiv supported wird.

    Zu deiner Aufgabenstellung: viele Wege führen zum Ziel . Einerseits könntest du dir den Security Helper im Template holen (der wird von Contao public gemacht und kann daher über den Container geholt werden). Damit kannst du dann, ab Contao 4.12, direkt abfragen ob ein Mitglied zu einer Gruppe gehört:
    PHP-Code:
    use Contao\CoreBundle\Security\ContaoCorePermissions;
    use 
    Contao\System;
    use 
    Symfony\Component\Security\Core\Security;

    /** @var Security $security */
    $security System::getContainer()->get('security.helper');

    // Check if member belongs to group
    if ($security->isGranted(ContaoCorePermissions::MEMBER_IN_GROUPS1)) {
        
    // …


    Einen Service über System::getContainer() zu holen ist aber nicht empfohlen. Besser ist es richtige Dependency Injection zu nutzen. Du könntest statt dessen über den parseTemplate Hook allen Frontend Templates eine isMemberOf Hilfsfunktion hinzufügen, die du dann ohne Weiteres im Template nutzen kannst:
    PHP-Code:
    // src/EventListener/ParseTemplateListener.php
    declare(strict_types=1);

    namespace 
    App\EventListener;

    use 
    Contao\CoreBundle\Security\ContaoCorePermissions;
    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\FrontendTemplate;
    use 
    Contao\Template;
    use 
    Symfony\Component\Security\Core\Security;

    /**
     * @Hook("parseTemplate")
     */
    class ParseTemplateListener
    {
        private 
    $security;

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

        public function 
    __invoke(Template $template): void
        
    {
            if (!
    $template instanceof FrontendTemplate) {
                return;
            }

            
    $template->isMemberOf = function ($groupId): bool {
                return 
    $this->security->isGranted(ContaoCorePermissions::MEMBER_IN_GROUPS$groupId);
            };
        }

    In jedem Frontend Template kannst du dann folgendes machen:
    PHP-Code:
    <?php if ($this->isMemberOf(1)): ?>
      <p>Member belongs to group ID 1!</p>
    <?php endif; ?>
    Oder auch:
    PHP-Code:
    <?php if ($this->isMemberOf([12])): ?>
      <p>Member blongs to either group ID 1 or 2!</p>
    <?php endif; ?>
    Geändert von Spooky (08.12.2021 um 10:54 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    29.06.2021.
    Beiträge
    7

    Daumen hoch

    Vielen Vielen Dank!
    Funktioniert und hat unglaublich weitergeholfen!

    Solche Beispiele wären in der Dokumentation gut aufgehoben

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

    Standard

    Zitat Zitat von mof Beitrag anzeigen
    Solche Beispiele wären in der Dokumentation gut aufgehoben
    https://github.com/contao/docs/pull/891

    Ist nun Live:

    Geändert von Spooky (09.12.2021 um 12:46 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  11. #11
    Contao-Nutzer
    Registriert seit
    29.06.2021.
    Beiträge
    7

    Standard

    @spooky Vielen Dank schonmal für den Eintrag in der Dokumentation!
    Übersehe ich etwas oder woran könnte es liegen, dass es nur im Debug Modus funktioniert?

    Im Debug Modus funktioniert alles wunderbar, aber trotz Service Registrierung, Composer install und allen geleerten Caches geht ohne Debug Modus garnix.

    Code:
    services:
      App\EventListener\ParseTemplateListener:
        tags:
          - { name: contao.hook, hook: parseTemplate }
    Code:
    Uncaught PHP Exception InvalidArgumentException: "isMemberOf is not set or not a callable"

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

    Standard

    Also sofern beim composer install kein Fehler kommt, sollte es eigentlich funktionieren. Service musst du nicht selbst registrieren, im Normalfall.
    » sponsor me via GitHub or PayPal or Revolut

  13. #13
    Contao-Nutzer
    Registriert seit
    29.06.2021.
    Beiträge
    7

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Also sofern beim composer install kein Fehler kommt, sollte es eigentlich funktionieren. Service musst du nicht selbst registrieren, im Normalfall.
    Hmm also irgendwo steckt noch ein Bug.
    Sobald ich den Debugodus deaktiviere wird der Ganze "parseTemplate" Hook nicht mehr ausgeführt. Per dd() getestet.

    Kann mir leider nicht erklären, woran das liegen könnte. Habs jetzt mal vorerst auf die erste Variante gelöst, die du im Post oben genannt hattest.

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

    Standard

    Zitat Zitat von mof Beitrag anzeigen
    Hmm also irgendwo steckt noch ein Bug.
    Sobald ich den Debugodus deaktiviere wird der Ganze "parseTemplate" Hook nicht mehr ausgeführt. Per dd() getestet.
    Poste die gesamte Konsolenausgabe von composer install, inkl. dem Command.
    » sponsor me via GitHub or PayPal or Revolut

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
  •