ilch Forum » Ilch Clan 1.1 » Module und Modifikationen » Grundrechte kopieren

Geschlossen
  1. #1
    User Pic
    MiNdFlY Mitglied
    Registriert seit
    01.10.2013
    Beiträge
    26
    Beitragswertungen
    0 Beitragspunkte
    Hallo zusammen!

    Ich stehe aktuell vor dem Problem, dass ich als eingeteilter Webmaster volle Grundrechte für unsere Page benötige, aber diese nur in der Gruppe "ClanLeader" bekommen kann. Da dies so aber nicht gewünscht ist, würde ich gerne eine eigene Gruppe mit allen Rechten für den Webmaster anlegen, quasi eine Kopie der ClanLeader-Rechte. In der Datei grundrechte.php habe ich bereits gesehen, dass ich
    $arb = array (
      -9 => 'Dieser User hat alle Rechte :-)',
    ein zweites Mal benötige, jedoch bin ich mir hierbei nicht sicher, ob eine Vergabe des gleichen Rechts für zwei verschiedene Gruppen überhaupt möglich ist? Hat da jemand einen Tipp oder ggf einen Lösungsansatz für mich?

    Schöne Grüße


    verwendete ilch Version: 1.1 P

    betroffene Homepage: externer Link
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Die Rechte werden fast überall nur aus der Session gelesen. Du könntest als für dich einen "Hack" einbauen, dass wenn du dich einloggst, dein Recht auch auf -9 gesetzt wird.

    Also in den Funktionen user_login_check und user_auto_login_check (includes/func/user.php) jeweils nach der ersten Zeile, die markierten Zeilen einfügen
    if (db_num_rows($erg) == 1) {
      if ($row['id'] === 123) { //123 ist deine userId
        $row['recht'] = -9;
      }
    debug ('user gefunden');
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    MiNdFlY Mitglied
    Registriert seit
    01.10.2013
    Beiträge
    26
    Beitragswertungen
    0 Beitragspunkte
    Ich hab das mal so testen wollen, jedoch kann ich interessanterweise weder meinen Rang zurückstufen noch mich nach erfolgtem Logout wieder neu einloggen (auch nicht mit meinem unberührten Zweitaccount). grumml
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Ok es muss mit == statt === sein.

    Deinen eigenen Account wirst du im Adminbereich nicht ändern können, nur der Admin mit 1 kann andere Admins administrieren.
    Warum du dich nicht einloggen können solltest ist mir nicht ganz klar, diese Änderung hat nur Auswirkungen auf den Benutzer mit der angegebenen Id, und auch erst wenn es == statt === ist.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Vermutlich muss das $row['id'] erst nach dem db_fetch_assoc plaziert werden...
    function user_login_check () {
      if ( isset ($_POST['user_login_sub']) AND isset ($_POST['name']) AND isset ($_POST['pass']) ) {
        debug ('posts vorhanden');
        $name = escape_nickname($_POST['name']);
        if ($name != $_POST['name'] OR strlen($_POST['name']) > 15) {
            return false;
        }
        $erg = db_query("SELECT name,id,recht,pass,llogin FROM prefix_user WHERE name = BINARY '".$name."'");
        if ( db_num_rows($erg) == 1 ) {
          debug ('user gefunden');
          $row = db_fetch_assoc($erg);
          if ($row['id'] == 123) { //123 ist deine userId
            $row['recht'] = -9;
          }
          if (user_pw_check($_POST['pass'], $row['pass'], $row['id']) ) {
            debug ('passwort stimmt ... '.$row['name']);
            $_SESSION['authname']  = $row['name'];
            $_SESSION['authid']    = $row['id'];
            $_SESSION['authright'] = $row['recht'];
            $_SESSION['lastlogin'] = $row['llogin'];
            $_SESSION['authsess']  = session_und_cookie_name();
            db_query("UPDATE prefix_online SET uid = ".$_SESSION['authid']." WHERE sid = '".session_id()."'");
            user_set_cookie($row['id'], $row['pass']);
            user_set_grps_and_modules();
            return (true);
          }
        }
        global $menu;
        $menu->set_url (0, 'user');
        $menu->set_url (1, 'login');
      }
      return ( false );
    }



    Zuletzt modifiziert von Outi77 am 19.02.2016 - 19:47:42
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Oh, ja das stimmt natürlich ...
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    MiNdFlY Mitglied
    Registriert seit
    01.10.2013
    Beiträge
    26
    Beitragswertungen
    0 Beitragspunkte
    Hallo Jungs, danke erstmal für die Vorschläge, leider bekomme ich weiterhin das Problem mit dem nicht funktionierenden Login, so dass ich gar nicht erst testen kann, ob das funktioniert.

    Das war jetzt mal mein letzter Versuch, ich habe es auch direkt nach Zeile 11 eingefügt, jedoch mit selbem Ergebnis. Kann es sein, dass ich es in die Abfrage ab Zeile 15 mit integrieren muss?

    function user_login_check () {
        if (isset($_POST['user_login_sub']) AND isset($_POST['name']) AND isset($_POST['pass'])) {
            debug('posts vorhanden');
            $name = escape_nickname($_POST['name']);
            if ($name != $_POST['name'] OR strlen($_POST['name']) > 15) {
                return(false);
            }
            $erg = db_query("SELECT name,id,recht,pass,llogin,banned FROM prefix_user WHERE name = BINARY '".$name."'");
            if (db_num_rows($erg) == 1) {
                debug('user gefunden');
                $row = db_fetch_assoc($erg);
                if ($row['banned']  == 1) {
                    return(false);
                } else {
                    if ($row['pass'] == md5($_POST['pass'])) {
                        debug('passwort stimmt ... '.$row['name']);
                        $_SESSION['authname']  = $row['name'];
                        $_SESSION['authid']    = $row['id'];
                        $_SESSION['authright'] = $row['recht'];
                        $_SESSION['lastlogin'] = $row['llogin'];
                        $_SESSION['authsess']  = session_und_cookie_name();
                        db_query("UPDATE prefix_online SET uid = ".$_SESSION['authid']." WHERE sid = '".session_id()."'");
                        setcookie($_SESSION['authsess'], $row['id'].'='.$row['pass'] , time() + 31104000, "/" );
                        user_set_grps_and_modules();
                        return(true);
                    }
    			if ($row['id'] == 1938) { //646 ist deine userId
    			$row['recht'] = -9;
    			}
                }
            }
            global $menu;
            $menu->set_url(0,'user');
            $menu->set_url(1,'login');
        }
        return(false);
    }
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Nex4T Moderator
    Registriert seit
    28.02.2007
    Beiträge
    3.414
    Beitragswertungen
    213 Beitragspunkte
    Warum gibts du dir nicht einfach rechte über die Datenbank?
    while(!asleep()) sheep++;
    www.movely.biz
    www.webplant.eu
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Also in deinem Beispiel, hast du es ja erst viel später drin, dort hat es keinen Effekt. Es dürfte auch keine Auswirkung auf den Login haben.

    Von der Sache her, muss es über Zeile 19 stehen, also vor der Verwendung von $row['recht'].
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    MiNdFlY Mitglied
    Registriert seit
    01.10.2013
    Beiträge
    26
    Beitragswertungen
    0 Beitragspunkte
    ZitatZitat geschrieben von Nex4T
    Warum gibts du dir nicht einfach rechte über die Datenbank?


    Damit lande ich direkt wieder in der Gruppe "Clanleader".

    Ich scheine leider echt zu doof sein, das richtig einzubinden, denn jedesmal schmiert mir das Script ab und ich kann mich nicht einloggen. weinen
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Also ich habs jetzt extra nochmal ausprobiert und es funktioniert.

    function user_login_check () {
      if ( isset ($_POST['user_login_sub']) AND isset ($_POST['name']) AND isset ($_POST['pass']) ) {
        debug ('posts vorhanden');
        $name = escape_nickname($_POST['name']);
        if ($name != $_POST['name'] OR strlen($_POST['name']) > 15) {
            return false;
        }
        $erg = db_query("SELECT name,id,recht,pass,llogin FROM prefix_user WHERE name = BINARY '".$name."'");
        if ( db_num_rows($erg) == 1 ) {
          debug ('user gefunden');
          $row = db_fetch_assoc($erg);
          if (user_pw_check($_POST['pass'], $row['pass'], $row['id']) ) {
            debug ('passwort stimmt ... '.$row['name']);
            $_SESSION['authname']  = $row['name'];
            $_SESSION['authid']    = $row['id'];
              if ($row['id'] == 4) { //User mit Id 4 wird Admin
                  $row['recht'] = -9;
              }
    
            $_SESSION['authright'] = $row['recht'];
            $_SESSION['lastlogin'] = $row['llogin'];
            $_SESSION['authsess']  = session_und_cookie_name();
            db_query("UPDATE prefix_online SET uid = ".$_SESSION['authid']." WHERE sid = '".session_id()."'");
            user_set_cookie($row['id'], $row['pass']);
            user_set_grps_and_modules();
            return (true);
          }
        }
        global $menu;
        $menu->set_url (0, 'user');
        $menu->set_url (1, 'login');
      }
      return ( false );
    }


    Äquivalent in der user_auto_login_check Funktion.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    1 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    Nex4T Moderator
    Registriert seit
    28.02.2007
    Beiträge
    3.414
    Beitragswertungen
    213 Beitragspunkte
    Na Na Na Mairu ich weiß nicht ob wir solche "Hacks" unterstützen solten :p
    while(!asleep()) sheep++;
    www.movely.biz
    www.webplant.eu
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Wer Zugriff auf den Code hat, kann eh machen, was er will. Ob ich das jetzt hier schreibe, oder andere es selbst herausfinden, ist dabei relativ egal.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    1 Mitglieder finden den Beitrag gut.
  14. #14
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    ZitatZitat geschrieben von Mairu
    Wer Zugriff auf den Code hat, kann eh machen, was er will.

    Solange er Ahnung davon hat zwinker
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  15. #15
    User Pic
    MiNdFlY Mitglied
    Registriert seit
    01.10.2013
    Beiträge
    26
    Beitragswertungen
    0 Beitragspunkte
    Hallo Jungs,

    sorry erstmal für die späte Antwort, ich war leider beruflich ziemlich eingespannt.

    Nun zum Thema, Mairu, dein Code funktioniert, jedoch habe ich bei mir entscheidende Probleme.

    Wenn ich einem Test-Account die Rechte gebe, kann ich mich solange nicht einloggen, bis ich dem Account per Administrator das Kennwort zurücksetze. Ein eigenständiges zuschicken lassen oder ändern über das Profilmanagement funktionieren nicht! verärgert

    Password Reminder:
    ZitatZitat
    Fatal error: Call to undefined function user_pw_crypt() in /kunden/257875_10963/Neu/include/contents/user/password_reminder.php on line 25


    Hier: Zeile 8
    if ( isset ( $_POST['name'] ) ) {
      $name = escape($_POST['name'],'string');
    	$erg = db_query("SELECT email FROM prefix_user WHERE name = BINARY '".$name."'");
    	if ( db_num_rows($erg) == 1 ) {
    		$row = db_fetch_assoc($erg);
    		
    		$new_pass = genkey(8);
    		$md5_pass = md5($new_pass);
    	  $id = md5 (uniqid (rand()));
    		
    		db_query("INSERT INTO prefix_usercheck (`check`,name,email,pass,datime,ak)
    		VALUES ('".$id."','".$name."','".$row['email']."','".$md5_pass."',NOW(),2)");
    		
    	  $page = $_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
    
    		$confirmlinktext = "\n".$lang['registconfirm']."\n\n".sprintf($lang['registconfirmlink'], $page, $id );
        $regmail = sprintf($lang['newpasswordmail'], $name, $confirmlinktext, $new_pass);
    		
    		icmail($row['email'],'Password Reminder',$regmail); # email an user
    		echo $lang['youhavereceivedaemail'];
    		$show = false;
    	} else {
        echo $lang['namenotfound'];
      }
    }



    Passwort ändern über Profil:
    ZitatZitat
    Fatal error: Call to undefined function user_pw_check() in /kunden/257875_10963/Neu/include/contents/user/profil_edit.php on line 61


    Hier: Zeile 9
    # change poassword
    	if ( !empty($_POST['np1']) AND !empty($_POST['np2']) AND !empty($_POST['op'])) {
        if ($_POST['np1'] == $_POST['np2']) {
    		  $akpw = db_result(db_query("SELECT pass FROM prefix_user WHERE id = ".$_SESSION['authid']),0);
    			if ($akpw == md5($_POST['op'])) {
    			  $newpw = md5($_POST['np1']);
    				db_query("UPDATE prefix_user SET pass = '".$newpw."' WHERE id = ".$_SESSION['authid']);
            setcookie(session_und_cookie_name(), $_SESSION['authid'].'='.$newpw, time() + 31104000, "/" );
    				$fmsg = $lang['passwortchanged'];
    			} else {
    		    $fmsg = $lang['passwortwrong'];
    		  }
    		} else {
    		  $fmsg = $lang['passwortnotequal'];
    	  }
      }


    Habe den Testnutzer mal gelöscht und neu registriert, damit kann ich mich zumindest mit dem bei der Registrierung angegebenen Kennwort einloggen, jedoch nicht ändern oder zuschicken lassen, da die gleichen Fehler wie oben auftreten. Das gilt leider auch für andere Nutzer.
    0 Mitglieder finden den Beitrag gut.
  16. #16
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Moin,

    also zunächst mal muss hier dringend geklärt werden, welche ilch-Version Du tatsächlich installiert hast.
    Im ersten Post steht 1.1P, der Auszug aus der password_reminder.php, den Du zuletzt gepostet hast, stammt aber ursprünglich aus Version 1.1O.
    Genau wie der Auszug aus der profil_edit.php, dieser stammt ebenfalls aus ilch-Version 1.1O.
    Hätte aber auch auffallen können, da beide Fehlermeldungen das Fehlen einer Funktion beschreiben, die aber jeweils in den Code-Schnipseln gar nicht auftauchen (user_pw_crypt() und user_pw_check()).
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    1 Mitglieder finden den Beitrag gut.
  17. #17
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Du hast anscheinend den kompletten Code von mir übernommen, und nicht nur die anfangs erwähnten 3 Zeilen.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    1 Mitglieder finden den Beitrag gut.
  18. #18
    User Pic
    MiNdFlY Mitglied
    Registriert seit
    01.10.2013
    Beiträge
    26
    Beitragswertungen
    0 Beitragspunkte
    Okay, ihr habt offiziell die Erlaubnis mich zu ohrfeigen.. ich habe nochmal ne ursprüngliche user.php genommen und dort die drei Zeilen eingefügt und jetzt scheints einwandfrei zu funktionieren...
    0 Mitglieder finden den Beitrag gut.
  19. #19
    User Pic
    Nex4T Moderator
    Registriert seit
    28.02.2007
    Beiträge
    3.414
    Beitragswertungen
    213 Beitragspunkte
    *OHRFEIGE* cool
    while(!asleep()) sheep++;
    www.movely.biz
    www.webplant.eu
    0 Mitglieder finden den Beitrag gut.
  20. #20
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    *Klatsch*
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Module und Modifikationen

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten