Backend User im Frontend

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

Beitrag von hyperjojo » Do 26. Jan 2006, 10:01

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

womic2000
Beiträge: 65
Registriert: Mo 17. Nov 2003, 11:18
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von womic2000 » Fr 27. Jan 2006, 18:25

Hallo,

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)

Kann mir jemand weiterhelfen ?

Gruß
Michael

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

Beitrag von Dodger77 » Fr 27. Jan 2006, 18:30

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)
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
Beiträge: 65
Registriert: Mo 17. Nov 2003, 11:18
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von womic2000 » Fr 27. Jan 2006, 18:53

Ok, ich habe im falschen Verzeichnis geschaut. Dort wo du beschrieben hast, liegt sie.

Ich habe diese Datei mal geändert, dass jedesmal true zurueck kommt. Dann geht es auch nicht. Mir scheint, diese Datei wird gar nicht gerufen.

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

Beitrag von HerrB » Sa 28. Jan 2006, 21:04

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
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 » So 29. Jan 2006, 16:52

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.
Die Änderung war (zumindest von meiner Seite) auch nicht dazu gedacht, das frühere System über Backenduser, die eine Frontend-Berechtigung haben, zu emulieren.
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.

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

Beitrag von HerrB » So 29. Jan 2006, 17:03

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
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

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Di 4. Mär 2008, 15:50

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)

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>';
}
?>
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ß

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Mo 10. Mär 2008, 21:21

ich push das mal ein bissel und schiel mal zu Herr B. rüber ;)

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

Beitrag von HerrB » Sa 15. Mär 2008, 19:10

Die Klasse heißt cApiUser und kann über

Code: Alles auswählen

cInclude("classes", "contenido/class.user.php");
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
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

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Mo 17. Mär 2008, 16:18

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...

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>';
}
?>
folgende Funktion store() habe ich dann noch in die von Herrn B. angesprochene "/contenido.class.user.php" eingebaut.

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();
	}
könnte das ganze so klappen?
gruß und schon einmal danke für die hilfe

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Fr 21. Mär 2008, 13:04

könnte mir einer helfen? wäre super nett ;)

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

Beitrag von HerrB » So 23. Mär 2008, 16:48

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):

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>'; 
}
}
?>
Ungetestet... ;-)

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

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » So 30. Mär 2008, 19:26

hey super! scheint zu funzen. hab gerade noch keinen zugriff auf die DB, aber kann mich im BE sowie im FE mit dem neuem PW einloggen...

Dankeschön!

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » So 6. Apr 2008, 15:42

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ß

Gesperrt