[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
geschuetzter zugang fuer eine kategorie - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
aart
Beiträge: 97
Registriert: 24. Aug 2004, 22:11
Kontaktdaten: ICQ

geschuetzter zugang fuer eine kategorie

3. Jun 2005, 07:58

hi,

wie laesst es sich einfach anstellen, eine kategorie (also hauptnavi-menuepunkt) mit einem passwortschutz zu belegen?

muss nicht pro user anforderbar und durch admin freischaltbar sein, waer aber schoen :-)
geht das mit der community?

darf aber auch ganz einfach sein, stellt man dann halt den entsprechenden usern zur verfuegung ...

gruss
aart

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

Re: geschuetzter zugang fuer eine kategorie

3. Jun 2005, 08:10

Hi,
aart hat geschrieben:wie laesst es sich einfach anstellen, eine kategorie (also hauptnavi-menuepunkt) mit einem passwortschutz zu belegen?
Also in der Community, können sich user einloggen und wenn diese eingeloggt sind, dann haben Sie ein "erweiteres" Menu.

Wenn dir das reicht, kannst du davon abkupfern.

Gruß,
Markus

Benutzeravatar
kate
Beiträge: 67
Registriert: 12. Dez 2004, 02:00

3. Jun 2005, 16:36

Hab testweise die Community installiert. Wo ist denn das? Bei mir sehe ich da nichts.

Goldfisch
Beiträge: 230
Registriert: 22. Sep 2004, 17:47
Wohnort: Aschaffenburg
Kontaktdaten: Website

3. Jun 2005, 19:45

das umfassend zu erklären, würde etwas zu weit führen.

in der Demo findest du im "01 Standard Template" in den ersten Zeilen

Code: Alles auswählen

// AUTHENTIFIZIERUNG
include $REX[INCLUDE_PATH]."/generated/templates/3.template";
hier wird das Template "01.02 Authentifizierung" eingebunden.
Kurz gesagt ...

wird auf jeder Seite der Login-Status des Besuchers abgefragt.

Auswirkungs hat das bei allen Artikeln, die einen Artikeltyp besitzen der > 1 ist.

Was heisst das?

Unter Specials findest du alle Artikeltypen, hier neben Standard auch Admin und User. Hier steht auch der ID-Wert der Typen, der hier abgefragt wird.

Wenn du dir die Artikel in der Demo ansiehst (hier unter Metadaten/Artikeltyp), die User-Daten enthalten wie
Mein Profil ... dann erkennt man, dass die Artikel andere Artikeltypen besitzen, z.b User.


Überprüfung des Login-Status

In den letzten Zeilen des Templates 01.02 Authentifizierung steht

Code: Alles auswählen

if ($this->getValue("type_id")>1)
{
 if ($FORM[USR]) 
 {
  if ($this->getValue("type_id")>$FORM[USER]->getValue("singlestatus"))
  {
   header("Location: index.php?article_id=8&FORM[errmsg]=".urlencode($err_msg)."");
   exit;
  }
 }else
 {
  header("Location: index.php?article_id=8&FORM[errmsg]=".urlencode($err_msg)."");
 }
}
hier wird nun in der 1. zeile der Artikeltyp angefragt, danach der Login Status des Users ($FORM[USR]). Wenn der Login-Status nicht true ist, dann wird des Besucher auf den Artikel mit ID 8 umgeleitet.
Ansonsten wird die Seite angezeigt.
Es gibt hier noch eine Abfrage die den Artikeltyp mit Familienstand vergleicht, deren Sinn ich nie verstanden habe und den man auch entfernen kann.




Login-Formular

Erstell man nun ein Formular, dass den Usernamen (FORM[rex_login] und das Passwort (FORM[rex_psw]) sendet, kann die Abfrage der Logindaten erfolgen und danach die entsprechenden Seite angezeigt oder gesperrt werden. Das geschieht über das eingebundene Template "Authentifizierung" automatisch.


Navigation - Anzeige

Im Template 01.01 Navigation wird der Login-Status ebenfalls angefragt und die Kategorie entsprechend angezeigt oder nicht.

Code: Alles auswählen

// USER STATUS FUER PERSOENLICHE NAVI
$utype_id = 1;
if ($FORM[USR]) $utype_id = $FORM[USER]->getValue("singlestatus");

und ein paar Zeilen tiefer die Abfrage und Anzeige

Code: Alles auswählen

 $type_id = $REX[ART][$aid][type_id];
 if ($aid == 1) $type_id = 1; // HOME PAGE AUSNAHME
 $CST = true;
 if ($type_id>$utype_id) $CST = false;

 if ($cat2==$id and $REX[CAT][$id][status]==1 and $CST)
{
 ....

}




schau dir daraufhin nochmal die Demo und Artikel an und mit den o.g. Ansätzen findest du deine Lösung.

Peter

Benutzeravatar
kate
Beiträge: 67
Registriert: 12. Dez 2004, 02:00

3. Jun 2005, 22:21

Erstmal Danke schön. Merkwürdig ist, dass ich unter der Community im Backend keine neuen User anlegen kann. Es meldet zurück:Neuen User anglegt, aber die Antahl der User wird immer noch mit 0 angezeigt und nach dem neuen User kann man auch nicht suchen.

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

13. Jul 2005, 17:06

Hallo,
Goldfisch hat geschrieben:in der Demo findest du im "01 Standard Template" in den ersten Zeilen

Code: Alles auswählen

// AUTHENTIFIZIERUNG
include $REX[INCLUDE_PATH]."/generated/templates/3.template";
hier wird das Template "01.02 Authentifizierung" eingebunden.
vielleicht könne mal jemand posten (falls griffbereit), was in dem Template "01.02 Authentifizierung" steht und damit inkludiert wird. So muss ich nicht extra die Demo installieren.

Danke für die Hilfe.

Grüße,
Johannes

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

13. Jul 2005, 19:20

Hi Johannes,

ich hab sie mal für dich installiert...

01.02 Authentifizierung:

Code: Alles auswählen

<?

setlocale(LC_ALL,"de_DE");

// -------------------------------------------------------------- USER AUTH

session_start();

$FORM[USR] = false;

$sql = new sql;


$user_id = 0;
$user_name = "";

if ($_SESSION[UID]['rex']!="" or $FORM[rex_login] != "" or $FORM[logout] != "")
{

 $FORM[USER] = new login();
 $FORM[USER]->setSqlDb(1);
 $FORM[USER]->setSysID("rex");
 $FORM[USER]->setLanguage("de");
 $FORM[USER]->setSessiontime(3000);
 $FORM[USER]->setLogin($FORM[rex_login],$FORM[rex_psw]);
 if ($FORM[LOGOUT] == 1) $FORM[USER]->setLogout(true);
 $FORM[USER]->setUserID("rex__user.id");
 $FORM[USER]->setUserquery("select * from rex__user where id='USR_UID' and status=1");
 $FORM[USER]->setLoginquery("select * from rex__user where login='USR_LOGIN' and psw='USR_PSW' and status=1");

 if ($FORM[USER]->checkLogin())
 {
  $FORM[USR] = true;
  $sql->query("update rex__user set last_action='".time()."' 
   where id='".$FORM[USER]->getValue("rex__user.id")."'");
  $user_id = $FORM[USER]->getValue("rex__user.id");
  $user_name = $FORM[USER]->getValue("rex__user.login");
  $sql->query("delete from rex__session 
   where session='".session_id()."' or stamp<'".(time()-1800)."' or user_id='$user_id'");
 }else
 {
  $err_msg = $FORM[USER]->message;
  $sql->query("delete from rex__session where session='".session_id()."' or stamp<'".(time()-1800)."'");
 }
 
}else
{
 $sql->query("delete from rex__session where session='".session_id()."' or stamp<'".(time()-1800)."'");
}

$sql->query("insert into rex__session set 
 session='".session_id()."', user_id='$user_id',name='$user_name',stamp='".time()."'");


if ($this->getValue("type_id")>1)
{
 if ($FORM[USR]) 
 {
  if ($this->getValue("type_id")>$FORM[USER]->getValue("singlestatus"))
  {
   header("Location: index.php?article_id=8&FORM[errmsg]=".urlencode($err_msg)."");
   exit;
  }
 }else
 {
  header("Location: index.php?article_id=8&FORM[errmsg]=".urlencode($err_msg)."");
 }
}


?>
Gruß,
Markus

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

13. Jul 2005, 19:30

Vielen Dank für Deine Mühe! Werde es mal ausprobieren.

Grüße,
Johannes

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

14. Jul 2005, 13:31

Hallo,
mir ist noch etwas aufgefallen.

Ist es Absicht oder ein Fehler, dass in dem oben genannten Quellcode sowohl $FORM[USER], als auch $FORM[USR] vorkommen?

Grüße,
Johannes

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Jul 2005, 13:49

Hi,

das ist so gewollt.

$FORM[USER] ist ein Object
$FORM[USR] ist eine boolean Variable

Gruß,
Markus

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

15. Jul 2005, 12:46

Hallo,
ich bastle nun schon eine ganze Weile an dem Login rum, habe es leider aber noch nicht zum Laufen bekommen.

Den o.g. Code habe ich etwas verändert, ein paar Dinge (Abfrage des Artikeltyps und des Famileinstatus) entfernt oder umbenannt, so wie es für mich logisch erschien.

Live ist das Ganze unter http://test.iez-ev.de/ zu sehen. Dort auf "Intranet" klicken. User: test, Pass: 12345

Das Problem scheint zu sein, dass checkLogin() nicht true wird. Auch wird das Login und die userid nicht in die Tabelle rex__session eingetragen. Die Session-ID und der Timestamp hingegen schon.

Vielleicht kann mir ja jemand einen Tipp geben, woran es liegen könnte.

Anbei nochmals der Code, so wie ich ihn nun verwende. Etwas besser lesbar findet ihr den Code nochmals hier.

Code: Alles auswählen

<?php
//USER AUTH
session_start();

$user = false;
$sql = new sql;

$user_id = 0;
$user_name = "";

if ($_SESSION['rex'] != "" or $_POST['login'] != "" or $logout != "")
{
	$login = new login();
	$login->setSqlDb(1);
	$login->setSysID("rex");
	$login->setLanguage("de");
	$login->setSessiontime(3000);
	$login->setLogin($_POST['login'],$_POST['psw']);
	if ($logout == 1) $login->setLogout(true);
	$login->setUserID("rex__user.id");
	$login->setUserquery("select * from rex__user where id='USR_UID' and status=1");
	//$login->setLoginquery("select * from rex__user where login='".$_POST['login']."' and psw='".$_POST['psw']."' and status=1");
	$login->setLoginquery("select * from rex__user where login='".USR_LOGIN."' and psw='".USR_PSW."' and status=1");
	
	if ($login->checkLogin()) //Timestamp ändert sich --> wird ausgeführt!, id und login fehlen
	{
		//Wenn Login ok, dann checkLogin() = TRUE (???)
		$user = true;
		$sql->query("update rex__user set last_action='".time()."' where id='".$login->getValue("rex__user.id")."'");
		$user_id = $login->getValue("rex__user.id");
		$user_name = $login->getValue("rex__user.login");
		$sql->query("delete from rex__session where session = '".session_id()."' or stamp < '".(time()-1800)."' or user_id='$user_id'");
	}
	else
	{
		$err_msg = $login->message;
		$sql->query("delete from rex__session where session='".session_id()."' or stamp < '".(time()-1800)."'");
	}
}
else
{
	$sql->query("delete from rex__session where session = '".session_id()."' or stamp < '".(time()-1800)."'");
}

//Wird immer ausgeführt
$sql->query("insert into rex__session set session='".session_id()."', user_id='$user_id',name='$user_name',stamp='".time()."'");

//Anzeige der entsprechenden Seite
if ($user)

{
	//Bei erfolgreichem Login
	header("Location: ?article_id=26&INFO=ERFOLGREICH");
	exit;
}
else
{	
	//Bei fehlerhaftem Login
	header("Location: ?article_id=30&INFO=FEHLER");
}
?>
Danke für eure Hilfe.

Johannes

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

15. Jul 2005, 12:56

Hi,

woher kommen die Variablen

USR_LOGIN u. USR_PSW

?

Gruß,
Markus

EDIT:
Fehlt da nicht ein $ bei den beiden Variablen?
Oder sind das Konstanten?
Zuletzt geändert von Markus.Staab am 15. Jul 2005, 13:08, insgesamt 2-mal geändert.

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

15. Jul 2005, 13:07

kills hat geschrieben:woher kommen die Variablen

USR_LOGIN u. USR_PSW
Hallo,
gute Frage, habe ich mir auch schon gestellt. Konnte es mir bisher aber nicht erkären. Sie stehen zumindest so im Template "01.02 Authentifizierung" drinnen.

Johannes

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

15. Jul 2005, 13:09

johannest hat geschrieben: Hallo,
gute Frage, habe ich mir auch schon gestellt. Konnte es mir bisher aber nicht erkären. Sie stehen zumindest so im Template "01.02 Authentifizierung" drinnen.

Johannes
Ich vermute das ist der Fehler...

anstatt

Code: Alles auswählen

  $login->setLoginquery("select * from rex__user where login='".USR_LOGIN."' and psw='".USR_PSW."' and status=1");
    
mach ma:

Code: Alles auswählen

  $login->setLoginquery("select * from rex__user where login='USR_LOGIN' and psw='USR_PSW' and status=1");
    
Das sind nur Platzhalter die intern ersetzt werden..

Gruß,
Markus

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

15. Jul 2005, 13:21

Hi,
leider hat die Änderung nichts gebracht. Es geht weiterhin nicht, Login und die userid werden nicht in die Tabelle rex__session eingetragen.

Vielleicht noch eine Idee?

Ist die Übergabe der Daten des Formulars in der Zeile

Code: Alles auswählen

$login->setLogin($_POST['login'],$_POST['psw']);
an der richtigen Stelle?

Johannes

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

15. Jul 2005, 13:27

Hi,

Das ist schon richtig, wenn deine Textfelder im Loginformular auch diese Namen Tragen..

Gruß,
Markus

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

15. Jul 2005, 13:57

Ja, das tun sie.

Johannes

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

15. Jul 2005, 16:30

Das muss man online sehen...

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

15. Jul 2005, 17:07

kills hat geschrieben:Das muss man online sehen...
PM mit Zugangsdaten ist raus!

Johannes

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

15. Jul 2005, 18:10

Hi,

vielleicht solltest du dir die Community Demo mal etwas besser anschauen..

Was ich z.b. gesehen habe ist, dass du in deinem Haupttemplate gar kein "include" auf das authentifizierungstemplate machst...

Das ist natürlich notwendig...

Ausserdem musst du im Template in dem du die Navigation ausliest, den aktuell evtl. eingeloggten User abfragen und Ihm dann die Extra Artikel einblenden.


Andere Frage:
Warum ist dein Haupttemplate mit so vielen komplizierten SQLs vollgestopft?


Meiner meinung nach solltest du dir die Community Demo nochmal richtig anschauen...

Wenn ich dir all diese Fehler ausbessern soll, dann sitze ich bis morgen früh noch drann. Ich gebe gerne kleine Hilfestellungen, aber du solltest zumindest das Grundgerüst richtig aufgebaut haben.

Falls sich das ganze hier etwas hart anhören sollte, so ist das nicht gemeint. Ich will dir nur einen wink in die richtige Richtung geben.

Gruß,
Markus

Benutzeravatar
johannest
Beiträge: 335
Registriert: 24. Aug 2004, 22:11

15. Jul 2005, 20:03

kills hat geschrieben:Was ich z.b. gesehen habe ist, dass du in deinem Haupttemplate gar kein "include" auf das authentifizierungstemplate machst...
Hallo,
Danke erstmal für Dein Bemühen. Es ist sicherlich nicht mein Ansinnen, dass Du im grßen Stil meine Fehler suchst. Einzelne Hinweise sind natürlich willkommen.

Leider ist mir unklar, wofür das Includen an dieser Stelle notwendig ist. Die Artikel, die geschützt sein sollen, bekommen das Login-Template, die anderen das normale Template. Ist der Include da wirklich nötig?

Zu den "komplizierten SQLs": Die SQLs generieren das Menü. Leider habe ich die Möglichkeit der Generierung des Menüs durch die Redaxo-eigenen Fähigkeiten erst nach Fertigstellug meiner eigenen Arbeit entdeckt.

Grüße,
Johannes

Zurück zu „Allgemeines [R2]“