Backend User im Frontend
hallo,
richtig. Dann habe ich mich falsch ausgedrückt. Ich verwende schon immer Backend-User mit Frontend-Zugriff.
Das Login im Frontend funktioniert auch, nur kommen die User nicht in die geschützten Bereiche.
Abhilfe schafft ein editieren jedes Backend-Users mit dem Recht "Frontend", was aber ne Menge Arbeit bedeutet...
ciao
Johannes
richtig. Dann habe ich mich falsch ausgedrückt. Ich verwende schon immer Backend-User mit Frontend-Zugriff.
Das Login im Frontend funktioniert auch, nur kommen die User nicht in die geschützten Bereiche.
Abhilfe schafft ein editieren jedes Backend-Users mit dem Recht "Frontend", was aber ne Menge Arbeit bedeutet...
ciao
Johannes
-
- Beiträge: 3626
- Registriert: Di 12. Okt 2004, 20:00
- Wohnort: Voerde (Niederrhein)
- Kontaktdaten:
Wenn es die bei dir nicht gibt, hast du vielleicht doch nicht das selbe Problem. Die Datei (die übrigens im Verzeichnis "/contenido/plugins/chains/includes" liegt) ist für den Schutz von Kategorien notwendig.womic2000 hat geschrieben:ich habe auch das zu Anfangs geschildetet Problem. Konnte aber hier irgenwie keine Lösung dazu finden.
Die Datei "include.chain.frontend.cat_backendaccess.php" gibts bei mir nicht (4.6.4)
Basics:
Die Datei im chain-Verzeichnis wird aufgerufen, um zu prüfen, ob ein Webseiten-Nutzer die Berechtigung hat, eine bestimmte Kategorie aufzurufen.
Webseiten-Nutzer sind (bei V4.6.x) standardmäßig nur die Frontend-Nutzer (Administration -> Frontend). Sie sind nur dann berechtigt, wenn sie Mitglieder einer Frontend-Nutzer-Gruppe sind, die unter Administration -> Frontend -> Frontend-Gruppe, Gruppe anklicken, rechts Submenü Category berechtigt wurden.
Die hier diskutierte Änderung ermöglicht es, dass Accounts, die (weil es nix anderes gab) als Backend-Nutzer mit Frontend-Berechtigung im System eingetragen wurden (Administration -> Benutzer), als berechtigt gelten.
Ich würde Dir daher empfehlen, zunächst Deine Änderungen rückgängig zu machen und dann zu prüfen, ob bei Dir diese Konstellation vorliegt und zu prüfen, ob Du diese nicht mit einem vertretbaren Aufwand zu "echten" Frontend-Nutzern migrieren kannst. Erst, wenn dies nicht so sinnvoll ist, solltest Du die vorgeschlagenen Änderungen testen.
Gruß
HerrB
Die Datei im chain-Verzeichnis wird aufgerufen, um zu prüfen, ob ein Webseiten-Nutzer die Berechtigung hat, eine bestimmte Kategorie aufzurufen.
Webseiten-Nutzer sind (bei V4.6.x) standardmäßig nur die Frontend-Nutzer (Administration -> Frontend). Sie sind nur dann berechtigt, wenn sie Mitglieder einer Frontend-Nutzer-Gruppe sind, die unter Administration -> Frontend -> Frontend-Gruppe, Gruppe anklicken, rechts Submenü Category berechtigt wurden.
Die hier diskutierte Änderung ermöglicht es, dass Accounts, die (weil es nix anderes gab) als Backend-Nutzer mit Frontend-Berechtigung im System eingetragen wurden (Administration -> Benutzer), als berechtigt gelten.
Ich würde Dir daher empfehlen, zunächst Deine Änderungen rückgängig zu machen und dann zu prüfen, ob bei Dir diese Konstellation vorliegt und zu prüfen, ob Du diese nicht mit einem vertretbaren Aufwand zu "echten" Frontend-Nutzern migrieren kannst. Erst, wenn dies nicht so sinnvoll ist, solltest Du die vorgeschlagenen Änderungen testen.
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
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
-
- Beiträge: 3626
- Registriert: Di 12. Okt 2004, 20:00
- Wohnort: Voerde (Niederrhein)
- Kontaktdaten:
Die Änderung war (zumindest von meiner Seite) auch nicht dazu gedacht, das frühere System über Backenduser, die eine Frontend-Berechtigung haben, zu emulieren.HerrB hat geschrieben:Die hier diskutierte Änderung ermöglicht es, dass Accounts, die (weil es nix anderes gab) als Backend-Nutzer mit Frontend-Berechtigung im System eingetragen wurden (Administration -> Benutzer), als berechtigt gelten.
Es ging mir dabei vielmehr darum, z.B. Redakteuren (also Backendusern) Zugang zu geschützten Kategorien zu ermöglichen. Anmelden können sie sich mit dem Login-Modul schließlich auch.
Ja, ist auch ein guter Ansatz.
Unter Tips&Tricks steht jetzt ein Konvertierungs-Tool bereit - damit kann man die FrontendUser-Accounts migrieren.
Sofern man über Redakteure mit Frontend-Zugriff verfügt, sollte man nicht die Option 'convert_remove' verwenden, sondern nach der Konvertierung die nicht mehr benötigten, reinen Frontenduser-Accounts manuell löschen.
Die Accounts der Redakteure wiederum muss man manuell als Frontenduser wieder löschen, wenn man nicht zwei Passworte haben möchte bzw. die hier vorgeschlagenen Änderungen verwendet.
Gruß
HerrB
Unter Tips&Tricks steht jetzt ein Konvertierungs-Tool bereit - damit kann man die FrontendUser-Accounts migrieren.
Sofern man über Redakteure mit Frontend-Zugriff verfügt, sollte man nicht die Option 'convert_remove' verwenden, sondern nach der Konvertierung die nicht mehr benötigten, reinen Frontenduser-Accounts manuell löschen.
Die Accounts der Redakteure wiederum muss man manuell als Frontenduser wieder löschen, wenn man nicht zwei Passworte haben möchte bzw. die hier vorgeschlagenen Änderungen verwendet.
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
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
hi,
ich will jetzt einfach die User doppelt laufen lassen.
FE und BE User mit dem gleichen Namen.
Die FE User können ihr Passwort im Frontend ändern. (Modul von HerrB)
Wie könnte man dieses MOdul umändern, damit es nicht nur das FE Passwort, sonder auch das PW zum Backend Account gleichzeitig mit aktualisiert. Der User wird im BE und im FE gleich heissen...
kann mir jemand helfen?
gruß
ich will jetzt einfach die User doppelt laufen lassen.
FE und BE User mit dem gleichen Namen.
Die FE User können ihr Passwort im Frontend ändern. (Modul von HerrB)
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Passwort ändern
* Author(s) : HerrB
* Copyright : HerrB
* Created : 31.03.2006
************************************************/
cInclude("classes", "class.frontend.users.php");
$frontendusers = new FrontendUserCollection;
$frontendusers->select("idclient = '$client' AND username = '".urlencode($auth->auth[uname])."'");
if ($frontenduser = $frontendusers->next()) {
$idfrontend = $frontenduser->get("idfrontenduser");
$strMsg = "";
if ($_REQUEST["action"] == "save") {
if ($_REQUEST["oldpw"] != "" || $_REQUEST["newpw1"] != "" || $_REQUEST["newpw2"] != "") {
if ($_REQUEST["oldpw"] == "") {
$strMsg = mi18n("Um ein neues Passwort zu vergeben, geben Sie bitte erst das alte Passwort ein.");
} else if ($_REQUEST["newpw1"] == "" || $_REQUEST["newpw2"] == "") {
$strMsg = mi18n("Geben Sie ein neues Passwort ein und wiederholen Sie es um Schreibfehler auszuschließen.");
} else if (md5($_REQUEST["oldpw"]) != $frontenduser->get("password")) {
$strMsg = mi18n("Das alte Passwort ist falsch.");
} else if ($_REQUEST["newpw1"] != $_REQUEST["newpw2"]) {
$strMsg = mi18n("Das wiederholte Passwort stimmt nicht mit dem neuem Passwort überein.");
} else if (strlen($_REQUEST["newpw1"]) > 24) {
$strMsg = mi18n("Das neue Passwort darf max. 24 Zeichen lang sein.");
} else if (strlen($_REQUEST["newpw1"]) < 6) {
$strMsg = mi18n("Das neue Passwort muss aus mindestens 6 Zeichen bestehen.");
}
}
if ($strMsg == "" && $_REQUEST["oldpw"] != "") {
$frontenduser->set("password", $_REQUEST["newpw1"]);
$frontenduser->store();
$strMsg = mi18n("Änderungen wurden gespeichert.");
} else {
$strMsg = '<font color="#FF0000">'.$strMsg.'</font>';
}
}
echo '<H2>Passwort ändern</H2>';
echo '<form name="frmProfile" method="post" action="'.$auth->url().'">';
echo '<table cellspacing="0" border="0">';
echo '<tr>';
echo ' <td>'.mi18n("altes Passwort:").'</td>';
echo ' <td><input name="oldpw" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
echo '<tr>';
echo ' <td>'.mi18n("neues Passwort:").'</td>';
echo ' <td><input name="newpw1" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
echo '<tr>';
echo ' <td>'.mi18n("neues Passwort wiederholen:").'</td>';
echo ' <td><input name="newpw2" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
if ($strMsg != "")
{
echo '<tr>';
echo ' <td colspan="2">'.$strMsg.'</td>';
echo '</tr>';
}
echo '<tr>';
echo ' <td colspan="2" align="right">';
echo ' <input type="button" value="zurück" onclick="javascript:history.back()">';
echo ' <input type="hidden" name="action" value="save">';
echo ' <input class="submit" name="subscribe" type="submit" id="subscribe" value="'.mi18n("speichern").'">';
echo ' </td>';
echo '</tr>';
echo '</table>';
echo '</form>';
}
?>
kann mir jemand helfen?
gruß
Die Klasse heißt cApiUser und kann über eingebunden werden.
Der Nutzername steht in der Spalte/Feld "username". Die ID steht in "user_id" und entspricht md5(username) (was mich gerade zu der lustigen Überlegung führt, dass damit der Nutzername case-sensitiv sein müsste...).
Die PW-Spalte müsste man noch raussuchen.
Gruß
HerrB
Code: Alles auswählen
cInclude("classes", "contenido/class.user.php");
Der Nutzername steht in der Spalte/Feld "username". Die ID steht in "user_id" und entspricht md5(username) (was mich gerade zu der lustigen Überlegung führt, dass damit der Nutzername case-sensitiv sein müsste...).
Die PW-Spalte müsste man noch raussuchen.
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
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
moin,
ich habe jetzt mal ein bissel rumgewurschtelt und das jetzt mal so umgebaut. da sind aber bestimmt noch fehler drin.
$idfrontend = $backenduser->get("idfrontenduser");
da weiss ich nicht, wie ich das erstetzen könnte...bräuchte nochmal eure hilfe...
folgende Funktion store() habe ich dann noch in die von Herrn B. angesprochene "/contenido.class.user.php" eingebaut.
könnte das ganze so klappen?
gruß und schon einmal danke für die hilfe
ich habe jetzt mal ein bissel rumgewurschtelt und das jetzt mal so umgebaut. da sind aber bestimmt noch fehler drin.
$idfrontend = $backenduser->get("idfrontenduser");
da weiss ich nicht, wie ich das erstetzen könnte...bräuchte nochmal eure hilfe...
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Passwort ändern
* Author(s) : HerrB
* Copyright : HerrB
* Created : 31.03.2006
************************************************/
cInclude("classes", "class.frontend.users.php");
cInclude("classes", "contenido/class.user.php");
//Frontenduser
$frontendusers = new FrontendUserCollection;
$frontendusers->select("idclient = '$client' AND username = '".urlencode($auth->auth[uname])."'");
if ($frontenduser = $frontendusers->next()) {
$idfrontend = $frontenduser->get("idfrontenduser");
//Backenduser
$backendusers = new cApiUserCollection;
$backendusers->select("user_id = '$client' AND username = '".urlencode($auth->auth[uname])."'");
if ($backenduser = $backendusers->next()) {
$idfrontend = $backenduser->get("idfrontenduser");
$strMsg = "";
if ($_REQUEST["action"] == "save") {
if ($_REQUEST["oldpw"] != "" || $_REQUEST["newpw1"] != "" || $_REQUEST["newpw2"] != "") {
if ($_REQUEST["oldpw"] == "") {
$strMsg = mi18n("Um ein neues Passwort zu vergeben, geben Sie bitte erst das alte Passwort ein.");
} else if ($_REQUEST["newpw1"] == "" || $_REQUEST["newpw2"] == "") {
$strMsg = mi18n("Geben Sie ein neues Passwort ein und wiederholen Sie es um Schreibfehler auszuschließen.");
} else if (md5($_REQUEST["oldpw"]) != $frontenduser->get("password")) {
$strMsg = mi18n("Das alte Passwort ist falsch.");
} else if ($_REQUEST["newpw1"] != $_REQUEST["newpw2"]) {
$strMsg = mi18n("Das wiederholte Passwort stimmt nicht mit dem neuem Passwort überein.");
} else if (strlen($_REQUEST["newpw1"]) > 24) {
$strMsg = mi18n("Das neue Passwort darf max. 24 Zeichen lang sein.");
} else if (strlen($_REQUEST["newpw1"]) < 6) {
$strMsg = mi18n("Das neue Passwort muss aus mindestens 6 Zeichen bestehen.");
}
}
if ($strMsg == "" && $_REQUEST["oldpw"] != "") {
$frontenduser->set("password", $_REQUEST["newpw1"]);
$frontenduser->store();
$backenduser->set("password", $_REQUEST["newpw1"]);
$backenduser->store();
$strMsg = mi18n("Änderungen wurden gespeichert.");
} else {
$strMsg = '<font color="#FF0000">'.$strMsg.'</font>';
}
}
echo '<H2>Passwort ändern</H2>';
echo '<form name="frmProfile" method="post" action="'.$auth->url().'">';
echo '<table cellspacing="0" border="0">';
echo '<tr>';
echo ' <td>'.mi18n("altes Passwort:").'</td>';
echo ' <td><input name="oldpw" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
echo '<tr>';
echo ' <td>'.mi18n("neues Passwort:").'</td>';
echo ' <td><input name="newpw1" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
echo '<tr>';
echo ' <td>'.mi18n("neues Passwort wiederholen:").'</td>';
echo ' <td><input name="newpw2" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
if ($strMsg != "")
{
echo '<tr>';
echo ' <td colspan="2">'.$strMsg.'</td>';
echo '</tr>';
}
echo '<tr>';
echo ' <td colspan="2" align="right">';
echo ' <input type="button" value="zurück" onclick="javascript:history.back()">';
echo ' <input type="hidden" name="action" value="save">';
echo ' <input class="submit" name="subscribe" type="submit" id="subscribe" value="'.mi18n("speichern").'">';
echo ' </td>';
echo '</tr>';
echo '</table>';
echo '</form>';
}
?>
Code: Alles auswählen
function store ()
{
global $auth;
$this->set("modified", date("Y-m-d H:i:s"), false);
$this->set("modifiedby", $auth->auth["uid"]);
parent::store();
}
gruß und schon einmal danke für die hilfe
Lasse Dir den Inhalt von Variable ausgeben, z.B. echo $auth->auth; oder rprint $auth->auth; - damit Du eine Idee bekommst, was darin enthalten ist.
Dann gucke Dir den Aufbau der Tabellen con_phplib_auth_user_md5 (Backend-User) und con_frontendusers (Frontend-User) an.
Die Änderung in der store()-Methode solltest Du wieder rückgängig machen - es sei denn, Du hast die Spalten modified und modifiedby in der Tabelle con_phplib_auth_user_md5 ergänzt.
$auth->auth["uid"] ist für Backend-Nutzer direkt die user_id, für Frontend-Nutzer direkt die idfrontenduser. Man kann sie sogar unterscheiden: Für Frontend-Nutzer ist sie numerisch, für Backend-Nutzer alphanumerisch, da es sich um den md5 des Nutzernamens handelt (md5($auth->auth[uname])).
Da das Modul sowieso nur im geschützten Bereich vorhanden sein sollte, könnte es so aussehen (ungetestet):
Ungetestet...
Gruß
HerrB
Dann gucke Dir den Aufbau der Tabellen con_phplib_auth_user_md5 (Backend-User) und con_frontendusers (Frontend-User) an.
Die Änderung in der store()-Methode solltest Du wieder rückgängig machen - es sei denn, Du hast die Spalten modified und modifiedby in der Tabelle con_phplib_auth_user_md5 ergänzt.
$auth->auth["uid"] ist für Backend-Nutzer direkt die user_id, für Frontend-Nutzer direkt die idfrontenduser. Man kann sie sogar unterscheiden: Für Frontend-Nutzer ist sie numerisch, für Backend-Nutzer alphanumerisch, da es sich um den md5 des Nutzernamens handelt (md5($auth->auth[uname])).
Da das Modul sowieso nur im geschützten Bereich vorhanden sein sollte, könnte es so aussehen (ungetestet):
Code: Alles auswählen
cInclude("classes", "class.frontend.users.php");
cInclude("classes", "contenido/class.user.php");
if (is_numeric($auth->auth["uid"])) {
// Only exec anything, if we are a logged-in-frontend user
// Frontenduser
$oFrontendUser = new FrontendUser;
$oFrontendUser->loadByPrimaryKey($auth->auth["uid"]);
$strMsg = "";
if ($_REQUEST["action"] == "save") {
if ($_REQUEST["oldpw"] != "" || $_REQUEST["newpw1"] != "" || $_REQUEST["newpw2"] != "") {
if ($_REQUEST["oldpw"] == "") {
$strMsg = mi18n("Um ein neues Passwort zu vergeben, geben Sie bitte erst das alte Passwort ein.");
} else if ($_REQUEST["newpw1"] == "" || $_REQUEST["newpw2"] == "") {
$strMsg = mi18n("Geben Sie ein neues Passwort ein und wiederholen Sie es um Schreibfehler auszuschließen.");
} else if (md5($_REQUEST["oldpw"]) != $oFrontendUser->get("password")) {
$strMsg = mi18n("Das alte Passwort ist falsch.");
} else if ($_REQUEST["newpw1"] != $_REQUEST["newpw2"]) {
$strMsg = mi18n("Das wiederholte Passwort stimmt nicht mit dem neuem Passwort überein.");
} else if (strlen($_REQUEST["newpw1"]) > 24) {
$strMsg = mi18n("Das neue Passwort darf max. 24 Zeichen lang sein.");
} else if (strlen($_REQUEST["newpw1"]) < 6) {
$strMsg = mi18n("Das neue Passwort muss aus mindestens 6 Zeichen bestehen.");
}
}
if ($strMsg == "" && $_REQUEST["oldpw"] != "") {
// Update frontend and backend password
$oFrontendUser->set("password", $_REQUEST["newpw1"]);
$oFrontendUser->store();
// Backenduser
$oBackendUser = new cApiUser(md5($auth->auth["uname"]));
// This is a possible security hole, if a backend user has the right to edit frontend users: He may specify a frontend user as named as an admin (backend account) and may reset his passwort using this module -> Only give certain people the right to edit frontend users...
$oBackendUser->set("password", md5($_REQUEST["newpw1"])); // Has to be md5, as class lacks a suitable store() method
$oBackendUser->store();
$strMsg = mi18n("Änderungen wurden gespeichert.");
} else {
$strMsg = '<font color="#FF0000">'.$strMsg.'</font>';
}
}
echo '<H2>Passwort ändern</H2>';
echo '<form name="frmProfile" method="post" action="'.$auth->url().'">';
echo '<table cellspacing="0" border="0">';
echo '<tr>';
echo ' <td>'.mi18n("altes Passwort:").'</td>';
echo ' <td><input name="oldpw" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
echo '<tr>';
echo ' <td>'.mi18n("neues Passwort:").'</td>';
echo ' <td><input name="newpw1" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
echo '<tr>';
echo ' <td>'.mi18n("neues Passwort wiederholen:").'</td>';
echo ' <td><input name="newpw2" type="password" size="24" maxlength="24"></td>';
echo '</tr>';
if ($strMsg != "")
{
echo '<tr>';
echo ' <td colspan="2">'.$strMsg.'</td>';
echo '</tr>';
}
echo '<tr>';
echo ' <td colspan="2" align="right">';
echo ' <input type="button" value="zurück" onclick="javascript:history.back()">';
echo ' <input type="hidden" name="action" value="save">';
echo ' <input class="submit" name="subscribe" type="submit" id="subscribe" value="'.mi18n("speichern").'">';
echo ' </td>';
echo '</tr>';
echo '</table>';
echo '</form>';
}
}
?>
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
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
mir ist grad noch was eingefallen. nicht alle user im FE haben einen user mit gleichen namen mit BE. Es gibt auch user, die nur FE zugriff haben werden.
das modul dürfe jetzt nur die FE und BE Passwörter syncn, wenn auch ein gleicher BE User besteht. Ist dies nicht der Fall, soll das Modul einfach nur das FE Passwort ändern.
könntest du das noch einbauen?
gruß
das modul dürfe jetzt nur die FE und BE Passwörter syncn, wenn auch ein gleicher BE User besteht. Ist dies nicht der Fall, soll das Modul einfach nur das FE Passwort ändern.
könntest du das noch einbauen?
gruß