Backend User im Frontend

TzeenieWheenie
Beiträge: 7
Registriert: Di 3. Jan 2006, 13:08
Kontaktdaten:

Backend User im Frontend

Beitrag von TzeenieWheenie » Do 5. Jan 2006, 08:33

Hallo!

Ich habe Benutzer, die sich sowohl im Frontend als auch im Backend einloggen können sollen. Im Frontend sollen nach Anmeldung geschützte Kategorien eingeblendet werden. Bis 4.6.2 funzte es problemlos, sich mit dem Backend-Account einzuloggen, doch seit dem Upgrade auf 4.6.4 können die Benutzer sich zwar einloggen, sehen aber keine geschützten Kategorien mehr, obwohl in der Benutzergruppe die Rechte für "Frontend-Zugriff" gesetzt sind...

Wenn ich jetzt Frontend-User anlege und die benutze klappt's einwandfrei, d.h. aber eben auch, dass die Benutzer sich 2 Passworte merken müssen - denn wenn sie ihr Passwort im Backend ändern, wird das für den Frontend-Account ja nicht mit geändert. :(

Hat irgendjmd ne Idee wie ich es hinkrieg, dass sie sich einfach wieder mit dem Backend-Account im Frontend anmelden können und dann Zugriff auf die geschützten Kategorien haben??

Dankeschön schon mal!
Der TzeenieWheenie

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 5. Jan 2006, 14:53

Ich würde es so machen, dass eine Änderung des Backend-PW auch das Frontend-PW ändert - und dass der jeweilige Account jeweils identisch ist.

Müsste man programmieren.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

TzeenieWheenie
Beiträge: 7
Registriert: Di 3. Jan 2006, 13:08
Kontaktdaten:

Beitrag von TzeenieWheenie » Fr 6. Jan 2006, 10:38

Mmmh, gibt's da wirklich keine bessere Lösung? Ist ja dann doch schon reichlich Aufwand die Accounts ständig zu synchronisieren und recht fehlerträchtig... :(
Kann man Backend-Usern denn wirklich keinen Zugriff auf geschützte Frontend-Seiten geben, oder hab ich bloß Tomaten auffe Augen?? %)

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Fr 6. Jan 2006, 10:58

Also, die angesprochene Überprüfung, ob ein Backenduser einen Frontendzugriff auf die aktuelle Kategorie hat, erfolgt über die Chain "include.chain.frontend.cat_backendaccess.php". D.h. eigentlich ist eine Synchronisierung nicht notwendig.

TzeenieWheenie
Beiträge: 7
Registriert: Di 3. Jan 2006, 13:08
Kontaktdaten:

Beitrag von TzeenieWheenie » Fr 6. Jan 2006, 13:14

@Dodger77:
Ah, ok, hab mir das mal angeguggt und jetzt weiß auch warum's nicht funzt: Ich habe die Rechte nur für die Gruppe gesetzt, nicht individuell für die Benutzer. Und das wird nicht überprüft, deshalb haben die Gruppenmitglieder trotz gesetzter Rechte keinen Zugriff! Sobald ich die Rechte für die Mitglieder individuell setze, funzt's auch.
Das ist wohl tatsächlich mal ein <bösesWort>Bug</bösesWort>, ne! =)

TzeenieWheenie
Beiträge: 7
Registriert: Di 3. Jan 2006, 13:08
Kontaktdaten:

Beitrag von TzeenieWheenie » Fr 6. Jan 2006, 13:22

Wenn ich das richtig sehe, müsste die SQL-Abfrage so lauten, oder:

Code: Alles auswählen

	$sql = "SELECT idright 
					FROM ".$cfg["tab"]["rights"]." AS A,
						 ".$cfg["tab"]["actions"]." AS B,
						 ".$cfg["tab"]["area"]." AS C,
						 ".$cfg["tab"]["groupmembers"]." AS D
					 WHERE B.name = 'front_allow' AND C.name = 'str' AND D.user_id = '".$user."' AND 
					 (A.user_id = '".$user."' OR A.user_id = D.group_id)
					 AND A.idcat = '$idcat'
							AND A.idarea = C.idarea AND B.idaction = A.idaction AND A.idlang = $idlang";
Scheint zumindest zu gehen.. :?

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Fr 6. Jan 2006, 13:46

TzeenieWheenie hat geschrieben:Wenn ich das richtig sehe, müsste die SQL-Abfrage so lauten, oder:

Code: Alles auswählen

	$sql = "SELECT idright 
					FROM ".$cfg["tab"]["rights"]." AS A,
						 ".$cfg["tab"]["actions"]." AS B,
						 ".$cfg["tab"]["area"]." AS C,
						 ".$cfg["tab"]["groupmembers"]." AS D
					 WHERE B.name = 'front_allow' AND C.name = 'str' AND D.user_id = '".$user."' AND 
					 (A.user_id = '".$user."' OR A.user_id = D.group_id)
					 AND A.idcat = '$idcat'
							AND A.idarea = C.idarea AND B.idaction = A.idaction AND A.idlang = $idlang";
Scheint zumindest zu gehen.. :?
Echt? Sieht mir jetzt ein wenig eigenartig aus. Ich hatte jetzt mal das hier probiert für die Datei "include.chain.frontend.cat_backendaccess.php":

Code: Alles auswählen

<?php
function cecFrontendCategoryAccess_Backend($idlang, $idcat, $user)
{
	global $cfg;
	
	$sql1 = "SELECT
               group_id
			 FROM
               ".$cfg["tab"]["groupmembers"]."
			 WHERE
               user_id = '".$user."'";
	$db1 = new DB_Contenido;
	$db1->query($sql1);
	$gr_where = "";
	while ($db1->next_record()) {
      $gr_where .= ",'".$db1->f("group_id")."'";
    }
	
	if ($gr_where == "") {
	  $sql2 = "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 = '$idcat' AND
                 A.idarea = C.idarea AND
                 B.idaction = A.idaction AND
                 A.idlang = $idlang";
	}
	else {
	  $sql2 = "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 IN ('".$user."'".$gr_where.") AND
                 A.idcat = '$idcat' AND
                 A.idarea = C.idarea AND
                 B.idaction = A.idaction AND
                 A.idlang = $idlang";
    }
	$db2 = new DB_Contenido;
	$db2->query($sql2);

	if (!$db2->next_record())
	{
		return false;
	}
	else
	{
		return true;
	}
}
?>
Hab's aber noch nicht getestet.

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Fr 6. Jan 2006, 13:58

Also bei funktioniert das, was ich gerade gepostet habe. Leider fragt das Hauptnavigationsmodul im Beispielmandanten nur die Berechtigungen der Frontenduser ab. Das müsste man noch entsprechend umbauen.

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Fr 6. Jan 2006, 14:44

Dodger77 hat geschrieben:Also, die angesprochene Überprüfung, ob ein Backenduser einen Frontendzugriff auf die aktuelle Kategorie hat, erfolgt über die Chain "include.chain.frontend.cat_backendaccess.php". D.h. eigentlich ist eine Synchronisierung nicht notwendig.
so hatte ich das eigentlich auch verstanden. allerdings verhält es sich bei mir ebenso, dass z.b. der sysadmin sich einloggen kann im frontend aber keine kategorien sieht.

wenn ich das frontend.protectedcategories.html recht interpretiere funktioniert es 'umgekehrt' auch nicht. sprich wenn ich die zeile

$_cecRegistry->addChainFunction("Contenido.Frontend.CategoryAccess", "cecFrontendCategoryAccess_Backend");

aus der config.plugin.php entferne, ändert sich nichts, access für den sysadmin weiterhin möglich, aber keine kats zu sehen?

doch ein BUG? mit dem frontend-login habe ich insgesamt so meine problemchen, siehe auch errorpages http://contenido.org/forum/viewtopic.php?t=11115
da scheint in der 4.6.4 einiges nicht ganz so zu funzen wie es angedacht ist :?

nachtrag: um es noch ein wenig genauer zu spezifizieren, der sysadmin kann sich im frontend einloggen und es erscheint dann 'sie sind eingelogget als: sysadmin' gleichzeitig wird aber die login_error_page angezeigt und keine geschützten kats sind accesible. logge ich mich aus wird die logout_success_page angezeigt.
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Fr 6. Jan 2006, 15:04

@mvf:

Eine Überprüfung auf sysadmin/admin findet dort auch gar nicht statt, soweit ich das sehe. Man kann sich durchaus als sysadmin/admin einloggen, hat aber dadurch nicht direkt einen Frontend-Zugriff. Gibt man diesem User aber explizit Rechte für den Frontend-Zugriff (für sysadmin/admin muss man tricksen und diese einer Gruppe mit den Rechten zuweisen), funktioniert das mit meiner oben geposteten Änderung sehr wohl.

Die Navigationsmodule müssen daran aber auch angepasst werden, da dort (soweit ich das sehe) keine Überprüfung Backendusers bzw. Backendusergruppen stattfindet.

TzeenieWheenie
Beiträge: 7
Registriert: Di 3. Jan 2006, 13:08
Kontaktdaten:

Beitrag von TzeenieWheenie » Mo 16. Jan 2006, 18:10

Dodger77 hat geschrieben:

Code: Alles auswählen

$sql2 = "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 = '$idcat' AND
                 A.idarea = C.idarea AND
                 B.idaction = A.idaction AND
                 A.idlang = $idlang";

Code: Alles auswählen

$sql2 = "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 IN ('".$user."'".$gr_where.") AND
                 A.idcat = '$idcat' AND
                 A.idarea = C.idarea AND
                 B.idaction = A.idaction AND
                 A.idlang = $idlang";
Mmh, diese beiden SQL Abfragen unterscheiden sich nur in einer Zeile - da sollte man IMO immer schon mal stutzig werden ob man diese Codeverdoppelung nicht einfacher lösen kann.. Außerdem scheint mir, dass unsere Abfragen genau das Gleiche tun, oder? Ich habe bloß die Überprüfung der Gruppenrechte gleich mit in die Abfrage integriert..

Code: Alles auswählen

	if (!$db2->next_record())
	{
		return false;
	}
	else
	{
		return true;
	}
}
?>
Sry, ich will hier wirklich nicht besserwissern, aber das sollte man IMAO wirklich so schreiben: 8)

Code: Alles auswählen

return $db2->next_record();

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Di 17. Jan 2006, 22:17

TzeenieWheenie hat geschrieben:Mmh, diese beiden SQL Abfragen unterscheiden sich nur in einer Zeile - da sollte man IMO immer schon mal stutzig werden ob man diese Codeverdoppelung nicht einfacher lösen kann.. Außerdem scheint mir, dass unsere Abfragen genau das Gleiche tun, oder? Ich habe bloß die Überprüfung der Gruppenrechte gleich mit in die Abfrage integriert..
Nein, die tun nicht das gleiche. Du überprüfst zwar auf Gruppenrechte, aber ein Backendnutzer, der nicht in einer Gruppe ist, aber selbst das Recht auf Frontend-Zugriff hat, bleibt bei deiner Lösung außen vor. Ich habe das gerade getestet.
TzeenieWheenie hat geschrieben:

Code: Alles auswählen

	if (!$db2->next_record())
	{
		return false;
	}
	else
	{
		return true;
	}
}
?>
Sry, ich will hier wirklich nicht besserwissern, aber das sollte man IMAO wirklich so schreiben: 8)

Code: Alles auswählen

return $db2->next_record();
Wenn du dir sicher bist. Ich denke, dass ich das besser so lasse wie es ist. Denn "next_record()" kann auch "0" zurückgeben. Sollte dies so sein, würde der Originalcode "false" zurückgeben, deiner jedoch "0". Wenn dann jemand etwas in der Form:

Code: Alles auswählen

if ($value === false)
realisiert aufgrund des Rückgabewertes, wird es mit dem Originalcode wohl weniger Probleme geben.

hyperjojo
Beiträge: 102
Registriert: Fr 1. Nov 2002, 23:57
Kontaktdaten:

Beitrag von hyperjojo » Mi 25. Jan 2006, 22:28

hallo,

habe diesen Thread gefunden, weil ich das gleiche Problem habe, nachdem ich auf 4.x geupdatet habe.

Gibts jetzt ne "Patentlösung", bevor ich alle Backend-User editiere und mir die Arbeit mache??

Danke Euch schonmal!


Johannes

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 26. Jan 2006, 00:53

Was meinst Du mit editieren?

Persönlich würde ich Dir empfehlen, die "Frontend-Nutzer" aus der "Backend-Nutzer"-Tabelle in die Frontend-User-Tabelle zu migrieren - aber das ist natürlich ein größerer Aufwand, da dabei Leer- und Sonderzeichen konvertiert werden müssen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Do 26. Jan 2006, 08:35

hyperjojo hat geschrieben:habe diesen Thread gefunden, weil ich das gleiche Problem habe, nachdem ich auf 4.x geupdatet habe.
Nein, das ist nicht das gleiche Problem. Bei einem Update von der 4.4.x auf die 4.6.x kann man die vorhandenen Backend-User zu Frontend-Usern migrieren (siehe Posting von HerrB). Hier ging es darum, dass das Frontend-Berechtigungs-Plugin nur für Frontend-User funktioniert. Backend-User, die Frontend-Zugriff haben, aber außen vor bleiben.

Gesperrt