ich bin momentan an der Entwicklung eines Passwortgeschützten Bereiche in dem verschiedene User bestimmte Rechte besitzen beispielsweise zum eintragen von News/Terminen.
Ich habe jetzt ein Login-Script erstellt das über eine MySQL DB Benutzer einloggt und eine Session erzeugt.
So jetz die frage:
Wie kann ich die Verschidenen Rechte die in der Datenbank hinterlegt sind über die Session an alle Seiten im Geschützten bereich weitergeben?
Login Script
[PHP]<?php
session_start();
?>
<?php
$verbindung = mysql_connect("##", "##" , "##")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("##") or die ("Datenbank konnte nicht ausgewählt werden");
$username = $_POST["username"];
$passwort = md5($_POST["password"]);
$abfrage = "SELECT username, passwort FROM ## WHERE username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
if ($row->passwort == $passwort)
{
$_SESSION["username"] = $username;
echo "Login erfolgreich.
header("Location: ./##.php");";
}
else
{
echo "Benutzername und/oder Passwort sind falsch. Login";
}
?>[/PHP]
Geschützte Seite
[PHP]<?php
session_start();
?>
<?php
if (!isset($_SESSION["username"]))
{
echo "Bitte erst Einloggen";
exit;
}
?>[/PHP]
Baue eine Login-Klasse die Du immer vor allem anderen in jeder Seite initialisierst. Darüber steuerst Du dann sowohl das Login als auch das Auslesen von Daten des eingeloggten Nutzers.
Du hast es doch schon fast. Musst nur im Session Objekt neben dem username noch die Rechte des Benutzers ablegen (1x aus DB beim Login auslesen) und die vor jeder privilegierten Aktion abfragen.
Ich würde sowas nicht in der Session ablegen (sondern pro Seitenaufruf neu aus der DB auslesen), da es zu Synchronisationsproblemen führen kann. Zum Beispiel dann, wenn dem Nutzer Rechte entzogen werden, er sie aber in seiner Session dennoch noch besitzt.
Kann man machen, wenn man damit rechnet, dass so etwas während der Session vorkommt. Aber bei geänderten Rechen kommt es häufig vor, dass der Benutzer sich neu anmelden muss, um Änderungen wirksam werden zu lassen. Zur Not kann man ja einen Timestamp mit speichern und nach Ablauf die Daten aktualisieren.