Bug beim Frontend Login mit Backend User?
Verfasst: So 21. Sep 2008, 14:29
Hi.
Ich hatte das Problem, dass ich mich mit einem Backend User der die Permission hat sich im Frontend einzuloggen dort aber nicht anmelden konnte... (Es wurde auf die Fehlerseite weitergeleitet)
Nach einigem Suchen im Code bin ich auf folgendes gestoßen:
In der Datei include.chain.frontend.cat_backendaccess.php wird der Parameter $user der Chain-Funktion mit nach Integer konvertiert.
Da es aber bei einem Backenduser die userid als Hash vorliegt wird natürlich nur bis zum auftauchen des ersten Buchstabens in Integer umgewandelt. Deshalb liefert die SQL abfrage ein leeres Resultat und es wird False an den Chain Iterator übergeben.
In front_content.php wird dann auf die Fehlerseite umgeleitet...
Hier der Code der Chainfunktion:
Ich denke mal, dass die SQL abfrage so gebaut werden müsste:
Da es sich bei dem "user_id" Parameter ja eh um einen Varchar Typ handelt ist die Kovertierung in Interger nicht nötig/bzw. geht nicht.
Dies Betrifft die Versionen 4.8.7 und 4.8.8. (Vermutlich auch die anderen 4.8.x Versionen, aber bei denen hab ich es nicht nachgeschaut)
Greets,
Martin.
Ich hatte das Problem, dass ich mich mit einem Backend User der die Permission hat sich im Frontend einzuloggen dort aber nicht anmelden konnte... (Es wurde auf die Fehlerseite weitergeleitet)
Nach einigem Suchen im Code bin ich auf folgendes gestoßen:
In der Datei include.chain.frontend.cat_backendaccess.php wird der Parameter $user der Chain-Funktion mit
Code: Alles auswählen
Contenido_Security::toInteger($user)
Da es aber bei einem Backenduser die userid als Hash vorliegt wird natürlich nur bis zum auftauchen des ersten Buchstabens in Integer umgewandelt. Deshalb liefert die SQL abfrage ein leeres Resultat und es wird False an den Chain Iterator übergeben.
In front_content.php wird dann auf die Fehlerseite umgeleitet...
Hier der Code der Chainfunktion:
Code: Alles auswählen
function cecFrontendCategoryAccess_Backend($idlang, $idcat, $user)
{
global $cfg;
$sql = "SELECT idright
FROM ".$cfg["tab"]["rights"]." AS A,
".$cfg["tab"]["actions"]." AS B,
".$cfg["tab"]["area"]." AS C
WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '". Contenido_Security::toInteger($user)."' AND A.idcat = '".Contenido_Security::toInteger($idcat)."'
AND A.idarea = C.idarea AND B.idaction = A.idaction AND A.idlang = '".Contenido_Security::toInteger($idlang)."'";
$db2 = new DB_Contenido;
$db2->query($sql);
if (!$db2->next_record())
{
return false;
}
else
{
return true;
}
}
Code: Alles auswählen
$sql = "SELECT idright
FROM ".$cfg["tab"]["rights"]." AS A,
".$cfg["tab"]["actions"]." AS B,
".$cfg["tab"]["area"]." AS C
WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '". $user ."' AND A.idcat = '".Contenido_Security::toInteger($idcat)."'
AND A.idarea = C.idarea AND B.idaction = A.idaction AND A.idlang = '".Contenido_Security::toInteger($idlang)."'";
Dies Betrifft die Versionen 4.8.7 und 4.8.8. (Vermutlich auch die anderen 4.8.x Versionen, aber bei denen hab ich es nicht nachgeschaut)
Greets,
Martin.