# Rechtesystem mit verschiedenen Benutzergruppen



## Spacedoener (3. Dezember 2003)

Hi,

habe ein großen Problem und würde mich echt sehr freuen, wenn ihr mir da Helfen könntet.

Habe ein Login Script aus dem *Tutorials "[PHP/mySQL] Login-System mit Sessions"*  kopiert und wollte mir den weiteren Script aus der *Tutorials "Rechtesystem mit verschiedenen Benutzergruppen"* in diesem einbinden...

Aber die beschreibungen und erklärungen sind sehr grob beschrieben und irgendwie funktioniert das ganze nicht.
Bitte bitte so helft mir, brauche dringend da mal Hilfe...

Das ganze sieht so aus:

*script.php:*

```
<?php
// Definition der Benutzer
$benutzer[0]["Nickname"] ="admin";
$benutzer[0]["Kennwort"] = "admin";
$benutzer[0]["Nachname"] = "Voll zugriff";
$benutzer[0]["Vorname"] = "Max";
$benutzer[0]["checkright"] = "7";

$benutzer[1]["Nickname"] = "test0";
$benutzer[1]["Kennwort"] = "abc";
$benutzer[1]["Nachname"] = "keine rechte";
$benutzer[1]["Vorname"] = "test0";
$benutzer[1]["checkright"] = "0";

$benutzer[2]["Nickname"] = "test1";
$benutzer[2]["Kennwort"] = "abc";
$benutzer[2]["Nachname"] = "Schreiben";
$benutzer[2]["Vorname"] = "test1";
$benutzer[2]["checkright"] = "1";

$benutzer[3]["Nickname"] = "test2";
$benutzer[3]["Kennwort"] = "abc";
$benutzer[3]["Nachname"] = "Bearbeiten";
$benutzer[3]["Vorname"] = "test2";
$benutzer[3]["checkright"] = "2";

$benutzer[4]["Nickname"] = "test4";
$benutzer[4]["Kennwort"] = "abc";
$benutzer[4]["Nachname"] = "löschen";
$benutzer[4]["Vorname"] = "test4";
$benutzer[4]["checkright"] = "4";

// Sie können an dieser Stelle beliebig viele Benutzer anlegen.
// Achten Sie dabei nur auf die Fortführung der Nummer.

// Aufbau der Datenbankverbindung
$connectionid = mysql_connect ("localhost", "root", "01039052");
if (!mysql_select_db ("LoginSystem", $connectionid))
{
  die ("Keine Verbindung zur Datenbank");
}

// Zuerst alle Datensätze löschen um keine Dopplungen zu bekommen.
mysql_query ("DELETE FROM benutzerdaten");

// Daten eintragen
while (list ($key, $value) = each ($benutzer))
{
  // SQL-Anweisung erstellen
  $sql = "INSERT INTO ".
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname, checkright) ".
  "VALUES ('".$value["Nickname"]."', '".
                       md5 ($value["Kennwort"])."', '".
                       $value["Nachname"]."', '".
                       $value["Vorname"]."', '".
                       $value["checkright"]."')";
  mysql_query ($sql);

  if (mysql_affected_rows ($connectionid) > 0)
  {
    echo "Benutzer erfolgreich angelegt.<br>\n";
  }
  else
  {
   echo "Fehler beim Anlegen der Benutzer.<br>\n";
  }
}
?>

</body>
</html>
```


*login.php* 

```
<?php
// Session starten
session_start ();

// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("localhost", "root", "01039052");
if (!mysql_select_db ("LoginSystem", $connectionid))
{
  die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT ".
    "Id, Nickname, Nachname, Vorname, checkright ".
  "FROM ".
    "benutzerdaten ".
  "WHERE ".
    "(Nickname like '".$_REQUEST["name"]."') AND ".
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
  // Benutzerdaten in ein Array auslesen.
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren
  $_SESSION["user_id"] = $data["Id"];
  $_SESSION["user_nickname"] = $data["Nickname"];
  $_SESSION["user_nachname"] = $data["Nachname"];
  $_SESSION["user_vorname"] = $data["Vorname"];
  $_SESSION["user_checkright"] = $data["checkright"];

  header ("Location: intern.php");
}
else
{
  header ("Location: formular.php?fehler=1");
}
?>
```

*formular.php* 

```
<?php session_start (); ?>
<html>
<head>
  <title>Login</title>
</head>

<body>
<?php
if (isset ($_REQUEST["fehler"]))
{
  echo "Die Zugangsdaten waren ungültig.";
}
?>
<form action="login.php" method="post">
  Name: <input type="text" name="name" size="20"><br>
  Kennwort: <input type="password" name="pwd" size="20"><br>
  <input type="submit" value="Login">
</form>
</body>
</html>
```

*checkuser.php* 


```
<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
  header ("Location: formular.php");
}
?>
```

*logout.php* 

```
<?php
// Wird ausgeführt um mit der Ausgabe des Headers zu warten.
ob_start ();

session_start ();
session_unset ();
session_destroy ();

header ("Location: formular.php");
ob_end_flush ();
?>
```

*intern.php* 

```
<?php
include ("checkuser.php");

?>
<html>
<head>
  <title>Interne Seite</title>
</head>
<body>
  BenutzerId: <?php echo $_SESSION["user_id"]; ?><br>
  Nickname: <?php echo $_SESSION["user_nickname"]; ?><br>
  Nachname: <?php echo $_SESSION["user_nachname"]; ?><br>
  Vorname: <?php echo $_SESSION["user_vorname"]; ?><br>
  Checkright: <?php $_SESSION["user_checkright"];?>
  <hr>
  
  <?php
  
    function checkright($userrank,$righttocheck)
    {
        if(($userrank & $righttocheck) == $righttocheck)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    

    $recht[0] = 0;    // 0001 (hier wird noch nicht geshiftet!)
    $recht[1] = 1;    // 0001 (hier wird noch nicht geshiftet!)
    $recht[2] = 1<<1; // 0010 (0001 um 1 nach links: 0010);
    $recht[3] = 1<<2; // 0100 (0001 um 2 nach links: 0100);
    $recht[4] = 1<<3; // 1000 (0001 um 3 nach links: 1000);
    
    
    
    $RechteKeyDesUsers = $_SESSION["user_checkright"];

    $RightToCheck = $recht[4];

    if(checkright($RechteKeyDesUsers,$RightToCheck))
    {
      //alles ok
      echo "<br>okay";
    }
    else
    {
     //nix ok
      echo "<br>nicht okay";
    }
    
  ?>
  <a href="logout.php">Ausloggen</a>
</body>
</html>
```


So das war das ganze, ich hoffe es kommt nicht viel auf einmal vors auge...
Aber die meisten änderungen ist bei den letzten script gemacht worden, also in "intern.php" ...

Was muss ich tun, was mache ich falsch, vom Theorie her was im Tutorials steht verstehe ich perfekt, aber leider haben die jenigen es sehr grob und sehr Anfänglich beschrieben, so dass man es nicht in PHP umsetzten kann...
z.B. der *Tutorials "[PHP/mySQL] Login-System mit Sessions"* ist dagegen perfekt erklärt worden so das man es nach voll ziehen kann...

Würde mich echt sehr freuen, wenn hier einer mir dabei Helfen könnte und mir schreibt wie ich es machen soll, habe da keine peilung mit...

MfG
Spacedoener

PS: Login funktioniert astrein...
Die User können sich ganz normal einlogen und auch wieder auslogen...
Nur die Rechtevergabe funktioniert nicht richtig...


----------

