Viel diskutiert: Frontend login

synomus
Beiträge: 27
Registriert: Di 11. Nov 2003, 17:48
Wohnort: Krefeld
Kontaktdaten:

Viel diskutiert: Frontend login

Beitrag von synomus » Di 6. Jan 2004, 11:38

Hallo zusammen!


Das o.g. Thema wurde zwar schon viel diskutiert, aber als ich mit dem durchlesen der Suchergebnisse (bezüglich: login) fertig war, wusste ich genauso viel wie vorher. :(

Mein Anliegen:

Existiert derzeit die Möglichkeit, eine reine Frontend-USER-Gruppe (ohne redaktionelle Rechte und ohne Login-Möglichkeit für das backend) zu erstellen, welche aufgrund des Frontendlogin dann Zugang zu einem geschützten Bereich (oder besonderen Bereich) im Frontend hat?

Dabei meine ich nicht die Möglichkeit einer Weiterleitung an eine bestimmte URL nach dem Login, sondern dass selbst wenn Jemand die URL der geschützten Adresse hat, diese nicht besuchen kann, weil er nicht eingeloggt ist bzw. die entsprechenden Rechte besitzt.


Wenn hierzu jemand ein paar Antworten gäben könnte, wäre ich dafür echt dankbar.


Gruß

Simon
contenido newby

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Di 6. Jan 2004, 12:08

Ja, also generell geht das, nur mit der Ausnahme, das sich dieser Nutzer theoretisch trotzdem ins Backend einloggen kann. Nur hat er hier keinen einzigen Menüpunkt zu Auswahl (wenn Du ihm nur das Frontend Recht gibst).
Aber das sollte ja nicht stören!

Du legst einfach einen Benutzer an, gibst ihm das Recht auf den entsprechenden Mandanten und die Sprache und dann unter Bereiche das Recht Frontend-Zugriff (für ALLE geschützten Bereiche) oder unter Kategorien nur für ausgewählte Kategorien das Recht Frontend-Zugriff!

Sollte ein Benutzer die Adresse eines geschützten Bereiches kennen und darauf zugreifen wollen, sperrt Contenido ihn, solange er keinen gültigen Login an!

Gruß,
Black Widow


P.S. Allerdings habe ich bemerkt, dass es mit den Rechten im Frontend gewisse Probleme gibt. Hab das auch schon mal zur Ansprache gebracht, aber anscheinend ist die Ursache sehr umfangreich und eine Abhilfe seitens Contenido vorerst nicht zu erwarten. Ich hab mir deshalb "manuell" geholfen! :wink:

Karl
Beiträge: 185
Registriert: Fr 28. Nov 2003, 19:07
Kontaktdaten:

Beitrag von Karl » Di 6. Jan 2004, 13:02

Ich hab mir deshalb "manuell" geholfen!
... und wie ?
Gruss Karl

synomus
Beiträge: 27
Registriert: Di 11. Nov 2003, 17:48
Wohnort: Krefeld
Kontaktdaten:

Beitrag von synomus » Di 6. Jan 2004, 13:11

@Black Widow

Danke für die Schilderung!

Wie du dir manuell geholfen hast, interessiert mich allerdings auch sehr!

htaccess auf das Verzeichnis contenido gelegt, oder was meinst du??
contenido newby

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Di 6. Jan 2004, 14:21

Nee,
die Rechtevergabe ansich funktioniert ja. Aber Contenido hat nen Prob bei der Überprüfung im Frontend! Versuch mal ... leg nen neuen Benutzer an, mit KEINEM EINZIGEN Recht, auch nicht generell auf den Mandanten oder Sprache. TROTZDEM kommt er in jeden geschützten Bereich rein.

Deswegen hab ich in meinem "geschützten Bereich" einfach "manuell" abgefragt, ob sie das Recht haben oder nicht. Wenn nicht, gibts Du ne Fehlermeldung aus und brichst mit die() ab, damit man den restlichen HTML-Code gar nicht erst sieht!

Gruß,
Black Widow

synomus
Beiträge: 27
Registriert: Di 11. Nov 2003, 17:48
Wohnort: Krefeld
Kontaktdaten:

Beitrag von synomus » Di 6. Jan 2004, 14:34

Black Widow hat geschrieben: Deswegen hab ich in meinem "geschützten Bereich" einfach "manuell" abgefragt, ob sie das Recht haben oder nicht. Wenn nicht, gibts Du ne Fehlermeldung aus und brichst mit die() ab, damit man den restlichen HTML-Code gar nicht erst sieht!
Kannst du vielleicht den PHP-Code der manuellen Abfrage posten?

Bin Neuling und habe gerade erst mit PHP angefangen..
contenido newby

Karl
Beiträge: 185
Registriert: Fr 28. Nov 2003, 19:07
Kontaktdaten:

Beitrag von Karl » Di 6. Jan 2004, 14:42

Kannst du vielleicht den PHP-Code der manuellen Abfrage posten?
Das wäre wirklich nett! Und vielleicht ein Satz, wo man ihn einbaut?
Gruss Karl

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Di 6. Jan 2004, 16:59

Hi!

Müsste das noch etwas umstricken damit es bei Euch läuft, komm ich heut nicht mehr zu! Mach ich morgen, ok?

Gruß,
Black Widow

synomus
Beiträge: 27
Registriert: Di 11. Nov 2003, 17:48
Wohnort: Krefeld
Kontaktdaten:

Beitrag von synomus » Di 6. Jan 2004, 17:04

Wunderbar!

Schon mal danke dafür!!!
contenido newby

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Mi 7. Jan 2004, 11:31

So, ist jetzt noch nicht das ALLERFEINSTE, aber ich denke, das überbrückt das Problem ganz gut ...

Zur Anwendung:
Erstellt einen Container in Eurem Layout. Dieser muss sich unbedingt im <head> befinden!!! Auf allen Seiten, die Ihr schützen wollt, packt ihr dann das Modul rein. Die Kategorie braucht mit diesem Modul nicht mehr durch Contenido geschützt zu werden!!!
Es prüft, ob ein Benutzer angemeldet ist und wenn, ob er ein admin des aktuellen Klienten oder ein sysadmin ist, oder das Recht Frontend-Zugriff für alle Kategorien oder aber zumindest für die aktuelle Kategorie hat. Außerdem werden ebenfalls alle Gruppen, in denen sich der Benutzer befindet, mitüberprüft!! Somit bleibt die Funktionalität der Gruppen auch hiermit weiterhin erhalten!! Sollte mindestens eine Gruppe das entsprechende Recht besitzen, ist der Zugang gewährt!

Hat der Benutzer kein Recht, oder ist kein Benutzer angemeldet, wird die GESAMTE weitere Verarbeitung abgebrochen! Dies ist leider nötig, damit ein unauthorisierter User auch den HTML-Quelltext nicht zu sehen bekommt, der ansonsten trotzdem generiert würde! Deswegen muss das Modul auch im <head> stehen!!

Die Werte der Variablen zu Beginn des Codes müsst/könnt Ihr ggf. anpassen! Überprüft auf jeden Fall die IDs der area "str" und der action "front_allow"!!

Hier der Quellcode:
Output:

Code: Alles auswählen

<?php
/****************************************************
** Contenido 4.4.x Modul
** OUTPUT
**
** Name:        Privacy Check
** Autor:       Timo Goedel
** Version:     0.1
** Erstellt:    07.01.2004
** Modifiziert: 07.01.2004
*****************************************************/

$areaID = 6;											//ID of the area called "str"
$actionID = 359;										//ID of the action called "front_allow" and the idarea = $areaID

$redirectTime = 3000;									//time to wait before redirecting
$redirectURL = $sess->url('front_content.php');			//URL to redirect (no user logged in)
$redirectURLDenied = $sess->url('front_content.php');	//URL to redirect (user is not authorized)
$redirectText = 'Startseite';							//statusbar-text of the redirect-link (onmouseover)


$accessGranted = false;
if ($auth->auth["uid"] != "nobody")
{
	$permissions = $auth->auth["perm"];
	$permissions = explode(',', $permissions);
	foreach ($permissions as $perm)
		if ($perm == "sysadmin" || $perm == "admin[".$client."]")
			$accessGranted = true;
	
	if (!$accessGranted)
	{
		$db_Connect = new DB_Contenido;
		$sql_checkFrontendAccess = "SELECT rights.idright
									FROM ".$cfg["tab"]["rights"]." rights,
										 ".$cfg["tab"]["groupmembers"]." groupmembrs
									WHERE  rights.idarea = ".$areaID." AND
										   rights.idaction = ".$actionID." AND
										   rights.idclient = ".$client." AND
										   rights.idlang = ".$lang." AND
										  (rights.idcat = 0 OR rights.idcat = ".$idcat.") AND
						   				  
										  (rights.user_id = '".$auth->auth["uid"]."' OR
										   (groupmembrs.user_id = '".$auth->auth["uid"]."' AND
										    rights.user_id = groupmembrs.group_id));";
		$db_Connect->query($sql_checkFrontendAccess);
		if ($db_Connect->next_record())
			$accessGranted = true;
	}
	
	if(!$accessGranted)
	{
		echo("<script type=\"text/javascript\">\r\n<!--\r\nwindow.setTimeout(\"window.location.href = \\\"".$redirectURLDenied."\\\"\", ".$redirectTime.");\r\n//-->\r\n</script>");
		echo("</head"."><body>");
		echo("<p align=\"center\"><br/>Sie haben leider nicht genügend Rechte um diese Seite zu betreten!<br/>Sie werden in ca. ".round($redirectTime/1000,0)." Sekunden weitergeleitet ...<br/>... sollte Ihr Browser keine Weiterleitung unterstützen, klicken Sie bitte <a href=\"".$redirectURLDenied."\" onMouseover=\"status='".$redirectText."';return true;\" onMouseout=\"status='';return true;\">hier</a>!</p>");
		echo('</body></html>');
		die();
	}
}
else
{
	echo("<script type=\"text/javascript\">\r\n<!--\r\nwindow.setTimeout(\"window.location.href = \\\"".$redirectURL."\\\"\", ".$redirectTime.");\r\n//-->\r\n</script>");
	echo("</head"."><body>");
	echo("<p align=\"center\"><br/>Diese Seite ist ein geschützer Bereich!<br/>Sie müssen sich zunächst mit Ihrem Benutzernamen und Passwort anmelden!<br/><br/>Sie werden in ca. ".round($redirectTime/1000,0)." Sekunden weitergeleitet ...<br/>... sollte Ihr Browser keine Weiterleitung unterstützen, klicken Sie bitte <a href=\"".$redirectURL."\" onMouseover=\"status='".$redirectText."';return true;\" onMouseout=\"status='';return true;\">hier</a>!</p>");
	echo('</body></html>');
	die();
}
?>

Ich hoffe, ich kann Euch damit etwas helfen!
Ich wäre froh über ein Feedback ... insbesondere, wenn jemandem eine bessere Lösung eingefallen ist, mit der man das die() verhindern kann!

Gruß,
Black Widow
Zuletzt geändert von Black Widow am Do 8. Jan 2004, 09:03, insgesamt 2-mal geändert.

synomus
Beiträge: 27
Registriert: Di 11. Nov 2003, 17:48
Wohnort: Krefeld
Kontaktdaten:

Beitrag von synomus » Mi 7. Jan 2004, 13:53

Hallo Timo!


Vielen Dank für den Code. Werde ihn direkt einbinden und mit dem Testen beginnen. Ein detailiertes Feedback gebe ich dir dann die Tage (natürlich nur auf die Anwendung bezogen, nicht auf PHP!).


Gruß
Simon
contenido newby

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Mi 7. Jan 2004, 13:59

Hi!

Ok, teste mal nen bisschen!
Ist wie gesagt etwas allgemeiner gehalten als bei mir, deswegen könnten noch durchaus Fehler drinnen sein ...

Gruß,
Timo

Karl
Beiträge: 185
Registriert: Fr 28. Nov 2003, 19:07
Kontaktdaten:

Beitrag von Karl » Mi 7. Jan 2004, 18:09

Erstmal schonmal danke für die schnelle Arbeit. Leider klappts noch nicht so richtig, kann aber an meiner Blödheit liegen.

1. ich hab es in einem 4.4.0 System versucht:
http://cont.karl-linne.com/cms
2. Auf dessen Startseite hab ich ein login Modul installiert, dass soweit ich es beurteilen kann, sich normal verhält.
3. Ich habe eine Unterkategorie "gallery" in der Kategorie "Bilder" geschützt.
4. Ich habe einen Container eingefügt innerhalb von "head" des Layout, das für das Template der Kategorie "gallery" benutzt wird.
5. Ich habe im Template des Artikels das Modul dem Container zugeordnet.
6. Ich habe einen Benutzer "black" mit dem Passwort "widow" angelegt.
7. Ich habe ihm Frontend Zugriff für die Kategorie "gallery" angehakt.

8. Ich habe getestet.
a) wenn niemand eingeloggt ist, wird der Zugriff verwehrt: Klasse! Super! Genau so soll es sein.
b) wenn ich mich als Administrator einlogge, darf ich drauf: Klasse ---sein.
c) wenn ich mich als "black" einlogge .... wird der Zugriff verweigert :-(

Kann es sein, dass das an 4.4.0 liegt?
Kann es sein, dass es an meinem unzureichenden Verständnis der Rechtevergabe liegt?
Gruss Karl

Karl
Beiträge: 185
Registriert: Fr 28. Nov 2003, 19:07
Kontaktdaten:

Beitrag von Karl » Mi 7. Jan 2004, 22:22

....

9. Wenn ich aber nun den Benutzer "black" der Gruppe "Lehrer" hinzufüge (sorry, nur zu Testzwecken), und dann dieser Gruppe den Frontendzugriff auf "gallery" erlaube, dann .... tadadadaaaa: klappt's.

10. Wenn ich nun einem weiteren Benutzer das Recht einräumen möchte, reicht es aber nicht, diesen einfach, der Gruppe hinzuzufügen. Er muss auch das Einzelrecht haben, und ich musste daraufhin der Gruppe das Recht nochmal neu geben, damit Contenido es schluckte.

Was davon jetzt normale Rechtelogik ist und was Bug ... :roll:

Wie dem auch sei. Wenn ich auf diesem Wege "individuelle Bereiche" hinkriege, dann kann ich erstmal damit leben und bedanke mich schonmal rieseig herzlich !!
Gruss Karl

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Do 8. Jan 2004, 08:59

Hi Karl!

Kann es sein, dass Du die Kategorie mit Contenido auch noch geschützt hast?? Weil das brauchst Du mit dem Modul ja nicht mehr! Hatte ich vergessen zu sagen ... :P

Wenn dem so ist, dann "entschütze" die Kategorie in Contenido mal und teste es nochmal... Eigentlich sollte es reichen, wenn der User einen Haken für Frontend-Zugriff hat. Wie gesagt werden aber auch die Gruppen mitgetestet. D.h. wenn der user black das Recht hat, müsste es eigentlich reichen.
Dass das Modul den Zugriff verwährt wird Dir sowieso durch eine Nachricht der Form "Dies ist ein geschützter Bereich. Melden Sie sich bitte zunächst an!" oder "Dies ist ... .Sie haben nicht genügend Rechte um diesen Bereich zu betreten" angezeigt, nicht durch das Contenido Login!!

Darauf bin ich nämlich gestoßen, als ich bei Dir versucht habe ohne Login die Seite zu betreten!

Teste das doch nochmal ...

Gruß,
Black Widow

P.S. Die Fehler die Du jetzt hattest könnten an eben den Fehlern in Contenido liegen, aus dessen Grund ich dieses Modul geschrieben hab! :wink:

Gesperrt