TYPO3: Zugriffsbeschränkte Seiten mit Login

Springe zu...

In den Seiteneigenschaften einer Seite kann man in Reiter „Zugriff“ über Einstellung „Zugriffsrechte für Benutzergruppen“ festlegen, ob der Benutzer eingeloggt oder ob er einer bestimmten Benutzergruppen zugehörig sein muss, um die Seite sehen zu dürfen. Standardmäßig zeigt TYPO3 Links auf solche Seiten nicht an, wenn der Benutzer nicht eingeloggt ist. Hier wird die Einrichtung einer alternativen Handhabung erklärt, bei der die Links auf diese Seiten angezeigt werden, beim Aufruf der Seite wird aber ein Login-Formular eingeblendet. Nach der richtigen Eingabe von Benutzername und Passwort wird der nun authentifizierte Benutzer auf die zuvor zugriffsbeschränkte Seite weitergeleitet.

Vorteile dieser Lösung:

  1. Verzicht auf Parameter „addParams“
  2. Parameter „redirect_url“ ist nicht in der URL sichtbar
  3. Leitet weiter zu sprechender URL
  4. Nutzt TYPO3 Funktion „pageErrorHandler“
  5. Konfigurierbar über localconf.php (ähnlich der Konfiguration für die 404 Fehlerseite)

Einrichtung

TS Setup

config.typolinkLinkAccessRestrictedPages = NONE

TS Setup für Menü (TMENU)

showAccessRestrictedPages = NONE

Durch das „NONE“ erscheint der Link zur zugriffsbeschränkten Seite sowohl im Menü als auch bei Links im Seitencontent, der Link wird aber nicht auf die Login-Seite umgebogen. Die zugriffsbeschränkte Seite wird also ganz normal aufgerufen, der Inhalt wird aber nicht angezeigt, sondern ein Login-Formular.

Mit dem Menü-Status USR kann man den zugriffsbeschränkten Seiten eine eigene CSS-Klasse zuweisen und diesen damit eine andere Formatierung geben.

Um die Anzeige des Login-Formulars auf zugriffsbeschränkten Seiten kümmert sich eine PHP-Funktion, die auch für die Anzeige der 404-Fehlerseite zuständig ist. Über die localconf.php wird konfiguriert, welche ID und welchen HTTP-Status-Code die 404-Seite und die Login-Seite haben:

localconf.php

$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = 'USER_FUNCTION:fileadmin/php/pageNotFoundHandling.php:user_pageNotFound->pageNotFound';
$TYPO3_CONF_VARS['FE']['pageNotFound_handling_statheader'] = 'HTTP/1.0 404 Not Found';
$TYPO3_CONF_VARS['FE']['pageNotFound_handling_redirectPageID'] = [page id for 404 page]; // attention: this parameter is not provided by TYPO3, but needed for page-not-found-userfunction
$TYPO3_CONF_VARS['FE']['accessRestrictedPages_handling_statheader'] = 'HTTP/1.0 403 Forbidden'; // attention: this parameter is not provided by TYPO3, but needed for page-not-found-userfunction
$TYPO3_CONF_VARS['FE']['accessRestrictedPages_handling_redirectPageID'] = [page id for login page]; // attention: this parameter is not provided by TYPO3, but needed for page-not-found-userfunction

pageNotFoundHandling.php

class user_pageNotFound {
 
    /**
     * Redirect to 404 error page with language-ID provided by ext. "realurl_force404lang" (if installed)
     * Redirect to login page
     *
     * @param array $params: "currentUrl", "reasonText" and "pageAccessFailureReasons"
     * @param object $tsfeObj: object type "tslib_fe"
     */
    function pageNotFound(&$params, &$pObj) {
        // access restricted page
        if(array_shift($params['pageAccessFailureReasons']['fe_group'])) {
            $pObj->pageErrorHandler(
                '/index.php?id=' . $GLOBALS['TYPO3_CONF_VARS']['FE']['accessRestrictedPages_handling_redirectPageID'] . '&redirect_url=' . urlencode($params['currentUrl']),
                $GLOBALS['TYPO3_CONF_VARS']['FE']['accessRestrictedPages_handling_statheader'],
                $params['pageAccessFailureReasons']['reasonText']
            );
        // 404 not found
        } else {
            // handle default language
            $pObj->pageErrorHandler('/index.php?id=' . $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling_redirectPageID'] . (array_key_exists('L', $_GET) ? '&L=' . $_GET['L'] : ''));
        }
    }
}

Als Extension für den Login wird felogin verwendet. Diese Erweiterung muss noch so konfiguriert sein, dass sie auf den Parameter „redirect_url“ hört, der in der URL übermittelt wird. Dazu wählt man Option „Definiert durch GET- oder POST-Variablen“ für den Weiterleitungsmodus aus.

Getestet mit TYPO3 4.7

Autor:
Geändert: Mittwoch, 6. Dezember 2017 14:26 Uhr
Erstellt: Mittwoch, 30. Oktober 2013 17:52 Uhr
Tags: , , , , , , ,
Themengebiet: Web Entwicklung, TYPO3

Trackback: Trackback-URL LoadingZu Favoriten hinzufügen

3 Kommentare

  1. 1

    Hallo,

    hast du durch die Nutzung von pageErrorHandler nicht Probleme, wenn [‚FE‘][‚accessRestrictedPages_handling_redirectPageID‘] eine Login-Seite ist und du rsa_auth verwendest?

    Viele Grüße
    Frederic

  2. 2

    Hallo Frederic,

    zu welchen Problemen kommt es?
    Ich habe bei der entsprechenden Webseite rsa für den FE Login nicht aktiviert.

    Viele Grüße
    Sven

  3. 3

    Ich hab versehentlich den php-code ohne einleitendes <?php in die neue Datei eingefügt, was dazu führt, dass man den Quelltext als Seite angezeigt bekommt.
    Nach dem ich den Fehler (nach 2std) gefunden hatte, funktionierte der Hack aber perfekt. Danke

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.