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
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/
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/
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Re: geschuetzter zugang fuer eine kategorie
Hi,
Wenn dir das reicht, kannst du davon abkupfern.
Gruß,
Markus
Also in der Community, können sich user einloggen und wenn diese eingeloggt sind, dann haben Sie ein "erweiteres" Menu.aart hat geschrieben:wie laesst es sich einfach anstellen, eine kategorie (also hauptnavi-menuepunkt) mit einem passwortschutz zu belegen?
Wenn dir das reicht, kannst du davon abkupfern.
Gruß,
Markus
-
- Beiträge: 230
- Registriert: 22. Sep 2004, 17:47
- Wohnort: Aschaffenburg
- Kontaktdaten: Website
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
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
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.
und ein paar Zeilen tiefer die Abfrage und Anzeige
schau dir daraufhin nochmal die Demo und Artikel an und mit den o.g. Ansätzen findest du deine Lösung.
Peter
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";
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)."");
}
}
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
Hallo,
Danke für die Hilfe.
Grüße,
Johannes
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.Goldfisch hat geschrieben:in der Demo findest du im "01 Standard Template" in den ersten Zeilen
hier wird das Template "01.02 Authentifizierung" eingebunden.Code: Alles auswählen
// AUTHENTIFIZIERUNG include $REX[INCLUDE_PATH]."/generated/templates/3.template";
Danke für die Hilfe.
Grüße,
Johannes
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi Johannes,
ich hab sie mal für dich installiert...
01.02 Authentifizierung:
Gruß,
Markus
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)."");
}
}
?>
Markus
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
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.
Danke für eure Hilfe.
Johannes
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");
}
?>
Johannes
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
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?
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.
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Ich vermute das ist der Fehler...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
anstatt
Code: Alles auswählen
$login->setLoginquery("select * from rex__user where login='".USR_LOGIN."' and psw='".USR_PSW."' and status=1");
Code: Alles auswählen
$login->setLoginquery("select * from rex__user where login='USR_LOGIN' and psw='USR_PSW' and status=1");
Gruß,
Markus
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 an der richtigen Stelle?
Johannes
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']);
Johannes
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
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
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
Hallo,kills hat geschrieben:Was ich z.b. gesehen habe ist, dass du in deinem Haupttemplate gar kein "include" auf das authentifizierungstemplate machst...
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