Geschützte Datei (catalog field: file) ausgeben?

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Nina
    Contao-Urgestein
    • 04.06.2009
    • 4755

    #1

    Geschützte Datei (catalog field: file) ausgeben?

    Ich habe im Katalog Dateien die aus einem per htaccess geschützten Ordner geladen werden.

    Im Template frage ich grundsätzlich erstmal ab, ob der Nutzer der Mitgliedergruppe X angehört:

    PHP-Code:
    <?php $this->import('FrontendUser', 'User'); ?> 
    <?php if(FE_USER_LOGGED_IN && $this->User->isMemberOf(1)): ?>  
    
               <a href="<?php echo $entry['data']['internal_download']['raw']; ?>" target="_blank">
                 <?php echo $entry['data']['internal_download']['label']; ?>
               </a>
    
    <?php endif; ?>
    Dieses Feld wird nur für Mitglieder der Gruppe angezeigt. ABER: Man kann die Datei trotzdem nicht herunterladen und erhält die Meldung
    You don't have permission to access /tl_files/internal/xyz.zip on this server.
    Ich habe in einem Thread aus 2010 gesehen, dass es damals noch keine Lösung dafür gab, aber davon gesprochen wurde, dass sie in den Catalog eingebaut wird. Gibt es die Lösung mittlerweile? Wenn ja, wie funktioniert sie?
  • Ulrich
    Contao-Fan
    • 03.03.2010
    • 395

    #2
    Hallo Nina, hast Du in der htaccess der betreffenden Gruppe den Zugriff erlaubt?
    Viele Grüße

    Uli

    Kommentar

    • Nina
      Contao-Urgestein
      • 04.06.2009
      • 4755

      #3
      Ich habe in der htacces gar nix von selbst eingestellt, sondern einfach die normale Schutzfunktion der Contao-Dateiverwaltung genutzt (also der Klick auf das Schlosssymbol in der Dateiverwaltung).

      Kommentar

      • Ulrich
        Contao-Fan
        • 03.03.2010
        • 395

        #4
        Schau mal hier ...
        Viele Grüße

        Uli

        Kommentar

        • Nina
          Contao-Urgestein
          • 04.06.2009
          • 4755

          #5
          Danke, ich weiß wie man htacess-Files schreibt

          Es geht mir darum, ob es mittlerweile eine Lösung für den Catalog gibt (eine fertige Lösung oder eine Idee wie man eine passende Abfrage im Template schreibt), die davon ausgeht, dass man die Contao-Dateiverwaltung so nutzt, wie sie standardmäßig von Contao ausgegeben wird (also auch mit einer unmodifizierten "standard"-htaccess wie die Dateiverwaltung sie beim Klick auf das Schloss-Symbol anlegt).

          PS: Damit hier keine Missverständnisse aufkommen ... wenn es noch keine Lösung gibt, bin ich auch bereit für eine (SEHR) zeitnahe Lösung zu bezahlen.

          Kommentar

          • Ulrich
            Contao-Fan
            • 03.03.2010
            • 395

            #6
            Ok, verstanden ... ... dann muss ich passen ...
            Viele Grüße

            Uli

            Kommentar

            • do_while
              Contao-Urgestein
              • 15.06.2009
              • 3699

              #7
              Hallo Nina,
              ein Download-Contentelement kann das. Hier wird die Aufruf-URL verändert. Vielleicht kannst Du das nachbauen. Ich habe im Moment leider keine Möglichkeit, mir das genauer anzusehen.

              Ich denke mal, in der .htaccess kommst Du da nicht weiter, da Du ja nicht für den Apache-Server eingeloggt bist, sondern per php in Contao, davon weiß aber der Apache nichts.
              Zuletzt geändert von do_while; 10.05.2012, 15:32.
              Gruß Hagen
              Mein Contao Premium Partnerprofil
              Link zum Stammtisch Berlin

              Kommentar

              • Nina
                Contao-Urgestein
                • 04.06.2009
                • 4755

                #8
                Ich habe dazu jetzt eine Anfrage im Auftragsforum gestellt.

                Kommentar

                • xtra
                  Maintainer
                  • 02.07.2009
                  • 2007

                  #9
                  Das sollte doch gehen

                  Methode 1: The native way (aka "Can I play Daddy?")

                  Du musst eigentlich nur bei dem file feld die Option Download link erzeugen (keine ahnung wie sie auf deutsch heisst) aktivieren ("Create link as file download or image lightbox") hierbei aber die Option "Als Bildansicht" oder sowas ("Enable as image field with thumbnail") NICHT(!) aktivieren.

                  Wichtig ist zudem, dass das Feld in den "sichtbaren Felder" aktiviert ist, ansonsten ignoriert das Modul den download request.
                  Das funktioniert in folgenden Modulen:
                  • ModuleCatalogList
                  • ModuleCatalogFeatured
                  • ModuleCatalogRelated
                  • ModuleCatalogReference
                  • ModuleCatalogReader

                  Wichtig weiterhin ist, dass die Datei Erweiterung entweder in $GLOBALS['TL_CONFIG']['allowedDownload'] (System konfiguration: Dateierwertungen zum Download) oder aber in der Feldkonfiguration unter den erlaubten Dateierweiterungen definiert wurde).

                  Methode 2: The hard way! (aka. "I know what I'm doing!")

                  Ansonsten kannst du in deinem Template die URLs anpassen
                  bsp: file Feld hat den Inhalt: "tl_files/foo/protected.jpg"

                  Zu erzeugende Url: /[pagealias].html?file=tl_files/foo/protected.jpg

                  PHP-Code:
                  <?php
                  $strImage = 'tl_files/foo/protected.jpg'; // hier anpassen und aus dem Catalog Array ziehen.
                  ?>
                  <a href="<?php echo $this->Environment->request . (($GLOBALS['TL_CONFIG']['disableAlias'] || strpos($this->Environment->request, '?') !== false) ? '&amp;' : '?') . 'file=' . $this->urlEncode($strImage); ?>">Klicke Hier um die Datei herunter zu laden.</a>

                  Hth
                  Chris

                  PS: muss ich nun auch noch im Auftragsforum antworten?
                  Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

                  Kommentar

                  • Nina
                    Contao-Urgestein
                    • 04.06.2009
                    • 4755

                    #10
                    Ich habe das jetzt so gemacht:

                    1. Geprüft ob die Dateiendung als Download unter System > Einstellungen erlaubt ist (ja)

                    2. Template angepasst:
                    Code:
                    <?php if (count($this->entries)): ?>
                      <?php foreach ($this->entries as $entry): ?>  
                        <div class="highres_list custom item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
                        
                        
                            <?php
                            $strHighRes = $entry['data']['highres_download']['raw']; // Download-URL aus dem Catalog Array ziehen.
                            ?>
                            
                            <div class="bild"> 
                              <?php if ($entry['data']['vorschaubild']['value']): ?>
                                <a href="<?php echo $this->Environment->request . (($GLOBALS['TL_CONFIG']['disableAlias'] || strpos($this->Environment->request, '?') !== false) ? '&amp;' : '?') . 'file=' . $this->urlEncode($strHighRes); ?>"><?php echo $entry['data']['vorschaubild']['value']; ?></a> 
                              <?php endif; ?>       
                            </div>
                          
                            <div class="text">
                              <?php if ($entry['data']['titel']['value']): ?><h2><?php echo $entry['data']['titel']['value']; ?></h2><?php endif; ?>
                              <?php if ($entry['data']['freitext']['value']): ?><?php echo $entry['data']['freitext']['value']; ?><?php endif; ?>          
                                
                              <p>
                               <a href="<?php echo $this->Environment->request . (($GLOBALS['TL_CONFIG']['disableAlias'] || strpos($this->Environment->request, '?') !== false) ? '&amp;' : '?') . 'file=' . $this->urlEncode($strHighRes); ?>"><?php echo $entry['data']['highres_download']['label']; ?> <?php if ($entry['data']['titel']['value']): ?><span class="invisible"><?php echo $entry['data']['titel']['value']; ?></span><?php endif; ?></a>
                              </p>
                              
                            </div>
                            
                        </div>
                      <?php endforeach; ?>
                    <?php endif; ?>
                    Es funktioniert! Herzlichen Dank für die schnelle Hilfe

                    Kommentar

                    Lädt...