Das Contao Camp 2020 in Hamburg. LEIDER ABGESAGT!
Ergebnis 1 bis 20 von 20

Thema: Seiten für bestimmte Mitgliedergruppen Sperren

  1. #1
    Contao-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard Seiten für bestimmte Mitgliedergruppen Sperren

    Hallo,

    mit Contao bestimmte Seiten nur für bestimmte Personen/Mitglieder freizugeben ist relativ simpel. Ich suche aber das Gegenteil: Wie kann man bestimmte Seiten für bestimmte Mitglieder Sperren, idealerweise so, dass diese Seiten erst gar nicht im Menü angezeigt werden?

    Der Hintergrund ist der, dass ich unsere Webseite als mobile App mittels Webview umsetzen möchte und dort bestimmte Seiten ausblenden möchte.

    Gruß

    Tefracky

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

    Standard

    Das Gegenteil? Ist für mich alle Seiten zu sperren und nur ein paar Seiten davon auszunehmen. Oder: Normale, nicht angemeldete Besucher alle Seiten sehen lassen und den Mitgliedern bei einigen Seiten den Zugriff verweigern. Ein bisschen schizophren das ganze.

    Da Du ja eh schon Mitglieder hast, die sich anmelden müssen, bist Du ja sehr flexibel beim Zuordnen von Mitgliedergruppen. Aber offensichtlich willst Du nur in der mobilen Ansicht Seiten sperren, unabhängig vom Anmeldestatus. Mir fällt dazu nichts ein, weil man einen mobilen Besucher nicht zuverlässig ermitteln kann.

    Gesendet von meinem L52 mit Tapatalk
    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

  3. #3
    Contao-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard

    Also der Teil mit mobiler Benutzer bezieht sich auf eine App, wobei das Problem auch schon insofern gelöst ist, dass man beim App Start automatisch als "appuser" angemeldet ist. Jetzt möchte ich, das die Gruppe "App" manche Seiten sehen darf, die Gäste und andere angemeldete Nutzer nicht sehen. Bisher habe ich nur den Schalter "nur Gästen anzeigen" gefunden. In diesem Fall können aber auch andere Gruppen außer "App" die Seiten sehen.

  4. #4
    Contao-Fan Avatar von w3scout
    Registriert seit
    20.06.2009.
    Ort
    Stuttgart
    Beiträge
    254

    Standard

    Zitat Zitat von tefracky Beitrag anzeigen
    Jetzt möchte ich, das die Gruppe "App" manche Seiten sehen darf, die Gäste und andere angemeldete Nutzer nicht sehen.
    Dann gib´ diese Seiten NUR für die Gruppe "App" frei.
    Geändert von w3scout (02.11.2017 um 16:26 Uhr)

  5. #5
    Contao-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard

    Tut mir Leid, jetzt habe ich im Kopf was verwechselt. Ich möchte, dass die Gruppe "App" manche Seiten/Elemente NICHT sehen darf. Alles andere ist ja einfach.

  6. #6
    Contao-Fan Avatar von w3scout
    Registriert seit
    20.06.2009.
    Ort
    Stuttgart
    Beiträge
    254

    Standard

    Zitat Zitat von tefracky Beitrag anzeigen
    Tut mir Leid, jetzt habe ich im Kopf was verwechselt. Ich möchte, dass die Gruppe "App" manche Seiten/Elemente NICHT sehen darf. Alles andere ist ja einfach.
    ich bin mir nicht sicher, ob ich Deine Anforderung richtig verstehe. Aber wenn, dann geht das was Du vor hast, nicht bzw. nur eingeschränkt.

    - Du kannst Seiten vor der Gruppe App verbergen, in dem Du Seiten für alle Mitgliedergruppen, außer der Gruppe "App", freischaltest.
    - Den Zugriff auf öffentlich sichtbare Seiten kannst Du aber nicht gleichzeitig für (eine) bestimmte Gruppe(n) sperren, da dies voraussetzen würde, dass Du den Zugriff generell erstmal sperrst, um dann den Zugriff für einzelne Gruppen wieder zu erlauben / oder zu verhindern (siehe oben). In dem Fall wäre dann die Seite aber nicht mehr öffentlich aufrufbar.

    // Edit: nochmal editiert, damit es (hoffentlich) klarer wird.
    // Edit2: evtl. wäre es eine Lösung, wenn Du Deiner "Appgruppe" ein eigenes "individuelles Menü" anzeigst, das weder öffentlich noch für andere Gruppen zu sehen ist!? Da könntest Du dann öffentlich sichtbare Seiten für die App-Gruppe ausschliessen.
    Geändert von w3scout (02.11.2017 um 18:28 Uhr)

  7. #7
    Contao-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard

    Zitat Zitat von w3scout Beitrag anzeigen
    - Den Zugriff auf öffentlich sichtbare Seiten kannst Du aber nicht gleichzeitig für (eine) bestimmte Gruppe(n) sperren, da dies voraussetzen würde, dass Du den Zugriff generell erstmal sperrst, um dann den Zugriff für einzelne Gruppen wieder zu erlauben / oder zu verhindern (siehe oben). In dem Fall wäre dann die Seite aber nicht mehr öffentlich aufrufbar.
    Das war eine klare Antwort. Es ist zwar schade, aber dann überlege ich mir eine andere Lösung

    Zitat Zitat von w3scout Beitrag anzeigen
    // Edit2: evtl. wäre es eine Lösung, wenn Du Deiner "Appgruppe" ein eigenes "individuelles Menü" anzeigst, das weder öffentlich noch für andere Gruppen zu sehen ist!? Da könntest Du dann öffentlich sichtbare Seiten für die App-Gruppe ausschliessen.
    Die Idee ist grundsätzlich nicht könnte schlecht. Ich könnte sogar damit leben, dass die Kopfzeile der Webseite mit dem Menü dann gar nicht angezeigt wird und ich die Navigation über die App bewerkstellige. Wie kann ich das am Sinnvollsten bewerkstelligen? Sorry, ich bin noch relativ neu in Contao und mit PHP konnte ich mich noch nicht sonderlich anfreunden.

    Danke für die Hilfestellung!

  8. #8
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.619
    User beschenken
    Wunschliste

    Standard

    Mal als Ansatz
    PHP-Code:
    $member = \FrontendUser::getInstance();

    if(
    $member->isMemberOf(3))
    {
      echo 
    'visitor is member of group ID3 and loged in';
      return; 
    // leaves this template at this point
    }

    echo 
    'there is no member loged in or a member is loged in but not in group ID3'
    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-Fan Avatar von w3scout
    Registriert seit
    20.06.2009.
    Ort
    Stuttgart
    Beiträge
    254

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Mal als Ansatz
    PHP-Code:
    $member = \FrontendUser::getInstance();

    if(
    $member->isMemberOf(3))
    {
      echo 
    'visitor is member of group ID3 and loged in';
      return; 
    // leaves this template at this point
    }

    echo 
    'there is no member loged in or a member is loged in but not in group ID3'
    Hatte ich auch schon dran gedacht. Aber das müsste man dann in die index.php einbauen und zusätzlich noch auf den Alias prüfen, da zwar der Inhalt dieses einen Templates nicht angezeigt wird, aber andere Inhalte der aufgerufenen Seite schon. Also z.B. wenn mehrere Artikel vorhanden sind oder die Seite aus mehreren Spalten/Layoutbereichen besteht.

    //Edit: index.php ist natürlich quatsch. Wenn dann in das fe_page Template. Evtl. hast Du das sogar gemeint?
    Allerdings hat man dann als Ergebnis ne weiße Seite und im Menü wird die Seite auch noch angezeigt.
    Geändert von w3scout (02.11.2017 um 22:40 Uhr)

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.619
    User beschenken
    Wunschliste

    Standard

    Nein, hatte gar nichts gemeint, war nur der Check um gezielt etwas zu machen, wenn jemand in einer bestimmten Gruppe ist. Deswegen "Ansatz". Klar, index.php war nix, da sollte man nicht ran. Bin auch kein Freund von fe_-Template-Anpassungen.

    Hier mal zwei Lösungen für ein FE-Modul, welches man ins Layout einbinden kann. Vorsicht, komplett ungetestet.
    PHP-Code:
    <?php

    // templates/check-members.php

    // use insert tag file::check-members.php in a front end module
    // include this module into your pagelayout (on top for performance reasons)

    global $objPage;

    $redirectToPage 'forbidden-for-this-group-members.html'// hardcoded so far
    $groupAppId     3;


    // solution 1: with hardcoded page IDs in this template
    $pagesNotForGroupApp = array(5102223);

    if(
    in_array($objPage->id$pagesNotForGroupApp))
    {
      
    $memberObj = \FrontendUser::getInstance();

      if(
    $memberObj->isMemberOf($groupAppId))
        /
    Controller::redirect($redirectToPage);
      }
    }


    // solution 2: with page CSS classes
    $CssClassToExcludeGroupApp 'not-for-app'// CSS class to be set on pages that are forbidden for the app group

    if($objPage->CssClass)
    {
      
    $pageClasses explode(' '$objPage->CssClass);

      if(
    in_array($CssClassToExcludeGroupApp$pageClasses))
      {
        
    $memberObj = \FrontendUser::getInstance();

        if(
    $memberObj->isMemberOf($groupAppId))
        {
          /
    Controller::redirect($redirectToPage);
        }
      }
    }
    Bei Lösung 2 muss man in den Seiteneinstellungen eine CSS-Klasse, hier "not-for-app" eintragen um diese Seite für Mitglieder aus dieser Seite auf die Seite, hier erstmal hardcodiert 'forbidden-for-this-group-members.html', weiterzuleiten.

    Diese Seiten-Klasse kann man auch im Navi-Template abfragen um den Listenpunkt zu diesen Seiten dann nicht zu rendern. Da würde ich da aber ein wenig aufpassen, weiß nicht, ob der Aufruf von
    PHP-Code:
    $memberObj = \FrontendUser::getInstance(); 
    in jedem Loop auf die Performance gehen kann.
    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 w3scout
    Registriert seit
    20.06.2009.
    Ort
    Stuttgart
    Beiträge
    254

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Bin auch kein Freund von fe_-Template-Anpassungen.
    Da bin ich voll bei Dir.

    @tefracky:
    Ein weiterer Ansatz wäre der "generatePage"-Hook (https://docs.contao.org/books/api/ex...eratePage.html) in Kombination mit Andreas´ Lösung. Der Weg wäre zumindest einfacher umsetzbar als ein "ganzes" Modul dafür zu coden.

    Ich hoffe, wir überfordern Dich hier nicht mit unseren Lösungsvorschlägen?
    Ich wollte auf die "Coding-Lösungen" eigentlich (erstmal) nicht eingehen, da Du neu hier bist und ich deshalb davon ausging, dass auch Contao für Dich noch neu ist.

  12. #12
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    1.947
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Ich halte auch den Weg über den generatePage Hook am zielführendsten.

    Was dazu noch zu beachten ist, dass dann die Seiten ggf. Aus der Navigation zu entfernen ist.

    Dies hatte ich Mal für den etwas komplexer es Setting umgesetzt. https://github.com/netzmacht/contao-feature-toggle

    Damit kann man Features definieren und diesen Seiten, Modulen oder Inhaltselementen zuweisen. Wenn das Feature aktiviert ist, ist der entsprechende content sichtbar oder nicht.

    Man muss nur die Features auf programmierebene definieren.

    Könnte aber sein guter Ausgangspunkt sein dir die Logik anzuschauen.

  13. #13
    Contao-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard

    Hallo ihr Beiden,

    Ich muss zugeben, ich bin schon etwas überfordert. Also den PHP Aufruf, bei dem gefragt wird, welcher Nutzer angemeldet ist, verstehe ich. Dann ist bei der Seite unter Seitenlayout die Kopfzeile mit Navigation usw. definiert. Im Prinzip bräuchte ich jetzt "nur" eine Routine, die diese Felder abschaltet, wenn ein bestimmter Benutzer angemeldet ist. Das wäre zumindest für mich die einfachste Lösung. Ansonsten weiß ich leider nicht so genau, wo die anderen eingefügt werden müssen. Ich müsste mich damit erst noch einmal in Ruhe beschäftigen, was aber dauern kann. Im Moment finde ich es am Besten, die ganze Navigation (Kopfzeile) abzuschalten und über die App umzusetzen.

    Gruß

  14. #14
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.619
    User beschenken
    Wunschliste

    Standard

    Im nav_template könntest du das so machen. Mal am Beispiel der Solution 1. (wieder ungestestet)
    PHP-Code:
    <?php
    global $objPage;
    $groupAppId 3;

    // solution 1: with hardcoded page IDs in this template
    $pagesNotForGroupApp = array(5102223);

    if(
    in_array($objPage->id$pagesNotForGroupApp))
    {
      
    // check only once and save in a global variable
      
    if(!isset($GLOBALS['isMemberOfGroupApp']))
      {
        
    $memberObj = \FrontendUser::getInstance();
        
    $GLOBALS['isMemberOfGroupApp'] = $memberObj->isMemberOf($groupAppId); // saves true or false
      
    }
    }
    ?>

    <ul class="<?= $this->level ?>">
      <?php foreach ($this->items as $item): ?>
        <?php
          
    if ($GLOBALS['isMemberOfGroupApp'])
          {
            continue; 
    // next loop
          
    }
        
    ?>
        <?php if ($item['isActive']): ?>
    ...
    Geändert von Andreas (04.11.2017 um 20:10 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

  15. #15
    Contao-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard

    Danke, ich schaue es mir morgen einmal an und schaue, was ich so hin bekomme, wird schon irgendwie werden.
    Ich muss mir den Code einfach in Ruhe anschauen, aber sooooo kompliziert sieht er jetzt auch nicht aus.

  16. #16
    Contao-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard

    So, ich muss zugeben, ich habe leider keine Ahnung, wo ich den Code eingeben muss...
    Zur Verdeutlichung habe ich ein paar Bilder angehängt.
    Bei "Module" sind alle Module zu sehen, die ausgeblendet werden müssten. Bei ~Main Navigation Beginn (Bild Main Navigation) habe ich mir das relativ einfach vorgestellt, da das schon ein HTML Code ist. Ich habe dann den Code etwas abgewandelt (Bild Main Navigation mit PHP), aber irgendwie klappt das nicht, der Code wird nicht ausgeführt.
    Wie sieht es bei den anderen Modulen aus? Bei Mobile Navigation z.B. (Bild Navigationsmenü) wird ja das Template "nav_default" aufgerufen, aber wo finde ich das? Unter Templates leider nicht...
    Gruß
    Angehängte Grafiken Angehängte Grafiken

  17. #17
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.619
    User beschenken
    Wunschliste

    Standard

    Dies ist alles leider völling falsch.

    1. Erstelle im BE eine Kopie von nav_default ("Neues Template" ganz oben).
    2. Umbenennen nach nav_mod.
    3. Da kommt der Code dann rein.
    4. Dieses Template im Nav-Modul auswählen.

    Mach dich vertraut mit den Templates, wie das fumktioniert. Über "Neues Template" erstellt man immer einen Kopie eines Templates aus dem Core. Hat man dieses Template erstellt, dann wird ab sofort die Kopie benutzt. Das Template im Core bleibt unangetastet. Löscht man die Kopie, wird sofort wieder das aus dem Core genommen. Fast alle Templates sind dann irgendwo im BE auswählbar, so wie das nav_-Template im Nav-Modul. Meistens ist es besser ein Template umzubenennen und dann zuzuordnen. Beim Umbenennen muss der Prefix inkl. des Unterstriches erhalten bleiben. Innerhalb des Templates sollte man oben einen Kommentar reinschreiben, was man gemacht hat.
    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-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard

    Hey,
    danke für die Erklärung, das verstehe ich dann!

    Es geht aber hier um den "Beginn" der Kopfzeile. Wie im angehängten Bild jetzt zu sehen ist, ist dort gar kein Standardtemplate hinterlegt, da es sich um einen HTML Code handelt. Wo würde ich da den PHP Aufruf einbauen? Direkt in das HTML Feld geht es nicht, das habe ich schon getestet.
    Gruß

  19. #19
    Contao-Nutzer
    Registriert seit
    23.10.2017.
    Beiträge
    99

    Standard

    Ich habe gerade noch eine andere Idee: Kann man für den Appuser einfach ein anderes Seitenlayout aufrufen? Es wäre dann immer in dem Stil originallayoutname_app.
    Die Seitenstile zu bearbeiten würde unterm Strich wesentlich schneller gehen als bei jedem Modul zu schauen, wie ich es bearbeite.
    Entschuldige meine Ahnungslosigkeit, aber ich habe das mit der Webseite einfach so angedreht bekommen vom Verein...

  20. #20
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.619
    User beschenken
    Wunschliste

    Standard

    In einem HTML-Module/ContentElement kann man keinen PHP-Code einfügen.

    Mach es einfach so, wie ich oben beschrieben habe. Die Datei templates/check-members.php per Instertag {{file::*}} ins HTML-Modul einfügen und den Code in diese Datei. Inserttags: https://docs.contao.org/books/manual...clude-elemente
    Zitat Zitat von Andreas Beitrag anzeigen
    PHP-Code:
    <?php

    // templates/check-members.php

    // use insert tag file::check-members.php in a front end module
    // include this module into your pagelayout (on top for performance reasons)
    ...
    Die Module haben ein "Wrapper"-Template, welches mit "mod_" beginnt und dann nochmal ein inneres Template, wo dann teilweise auch Loops ausgeführt werden, z.B. bei Listen, oder einer Navigation (mod_navigation, nav_default; mod_eventlist, event_upcoming). Beim HTML-Modul gibt es kein inneres Template. Wenn dort nichts ausgewählt wird, wird automatisch mod_html benutzt.

    Nur am Rande: Wie du jetzt erkennen müsstest, könntest du den PHP-Code auch direkt in ein Template "mod_my-member-check.html5" einfügen. Als HTML da z.B. nur reinschreiben.
    HTML-Code:
    <!-- PHP code is in mod_my-member-check.html5 -->
    Und dieses Template im Modul dann auswählen.

    Deine neue Idee verfolge ich jetzt nicht weiter. Du brauchst nicht "bei jedem Modul zu schauen, wie du es bearbeitest". Du willst Seiten sperren. Dafür benötigst du 2 Module. Einmal das individuelle Navigationsmodul um die Seiten im Menü nicht anzuzeigen und einmal das eigene Modul um die Seiten tatsächlich zu sperren.
    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

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
  •