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 Verlinkungen 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:
- Verzicht auf Parameter „addParams“
- Parameter „redirect_url“ ist nicht in der URL sichtbar
- Leitet weiter zu sprechender URL
- Nutzt TYPO3 Funktion „pageErrorHandler“
- 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:
ext_localconf.php oder AdditionalConfiguration.php
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = 'USER_FUNCTION:EXT:my_ext/Classes/Userfunc/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 * * @param array $params: "currentUrl", "reasonText" and "pageAccessFailureReasons" * @param object $tsfeObj: object type "tslib_fe" */ function pageNotFound(&$params, &$pObj) { // Page was not found because user has accessed an access restricted page if(array_shift($params['pageAccessFailureReasons']['fe_group']) && $GLOBALS['TYPO3_CONF_VARS']['FE']['accessRestrictedPages_handling_redirectPageID']) { $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'] ); } // Get first realurl configuration array (important for multidomain) $realurlConf = array_shift($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']); // look for language configuration foreach($realurlConf['preVars'] as $conf) { if($conf['GETvar'] == 'L') { if(is_array($conf['valueMap'])) { foreach($conf['valueMap'] as $k => $v) { // we expect a part like "/de/" in requested url if(strpos($params['currentUrl'], '/' . $k . '/') !== false) { $pObj->pageErrorHandler('/index.php?id=' . $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling_redirectPageID'] . '&L=' . $v); } } } } } // Handle default language $pObj->pageErrorHandler('/index.php?id=' . $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling_redirectPageID']); } } |
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 7.6
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
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
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