phpbar.de logo

Mailinglisten-Archive

[php] Benutzerverwaltung
Archiv Mailingliste php_(at)_infosoc.uni-koeln.de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[php] Benutzerverwaltung



Ich arbeite gerade an einer WWW-Benutzerverwaltung und würde gerne 
ein paar Meinungen und Verbesserungsvorschläge zu verschiedenen 
möglichen Ansätzen hören.

Eine WWW-Benutzerverwaltung soll ermöglichen, daß verschiedene 
Benutzer je nach (Gruppen-)Rechten unterschiedliche Webseiten bzw. 
Inhalte angezeigt bekommen. Ihr Name soll in Diskussionsforen schon 
eingetragen werden, sie sollen Inhalte editieren können oder einfach 
Neuigkeiten seit dem letzten Besuch angezeigt bekommen (und vieles 
mehr).

Dazu verwende ich Basic Authentication mit einer MySQL-Datenbank und 
wahlweise .htaccess oder PHP_AUTH_USER. Im aktuellen Projekt kommt 
die zweite Methode zur Anwendung, weil die Seiten auch ohne 
Authentifizierung zugänglich sein sollen, eingetragene Benutzer aber 
erweiterte Möglichkeiten haben.

Die Benutzerdatenbank sieht etwa so aus:

Tabelle 1 "wwwuser" enthält die Benutzerdaten userid, username, 
password, name, email, url, usw.
Tabelle 2 "wwwgroup" enthält die Gruppendaten groupid, groupname, 
titel, beschreibung, usw.
Tabelle 3 "usergroup" ermöglicht eine n:m-Verknüpfung zwischen 
wwwuser und wwwgroup und enthält vor allem userid und groupid.

Das ist ein recht allgemeines Konzept und erlaubt beliebige User, 
Gruppen und Beziehungen dazwischen. Da ich die Rechte in meinen 
Scripten gruppenweise vergebe, muß ich neben den Benutzerdaten auch 
immer die Gruppenzugehörigkeit ermitteln:

if ($PHP_AUTH_USER) {
  $username=strtolower($PHP_AUTH_USER);
  $userdata=mysql("user","select * from wwwuser u, usergroup v 
    where username='$username' and u.userid=v.userid 
    order by groupid");

Diese Daten könnte ich in ein zweidimensionales Array einlesen, aber 
da sich nur die Gruppenzugehörigkeit unterscheidet, lese ich diese in 
eine Liste:

$u=mysql_fetch_array($userdata);
$u['groups']="0";
while ($x=mysql_fetch_array($userdata)) {
  $u['groups'].=",".$x['groupid'];
}	

Ich habe dann also ein Array $u, daß alle Userdaten ($u['name'] usw.) 
und zusätzlich in $u['groups'] eine durch Kommata getrennte Liste der 
GruppenIDs des Users enthält. Damit kann ich dann z.B. Benutzern der 
Gruppe 1 einen Edit-Knopf anbieten:

if (strstr($u['groups'],",1")) {
  echo "<A HREF=\"/edit.php?pfad=".$pfad."\">
    <IMG SRC=\"/img/edit.gif\" ALT=\"Inhalt bearbeiten\"
    BORDER=0 WIDTH=13 HEIGHT=15></A>";
}

Frage 1: Gibt es bessere (elegantere, schnellere, allgemeinere,...) 
Lösungen? Kennt Ihr andere Beispiele?

Frage 2: Da ich im Script mit einer Gruppenliste arbeite, warum mache 
ich mir die Mühe und speichere die Gruppen in einer Extra-Tabelle und 
nicht gleich in einem Feld der Tabelle wwwuser?

Und noch eine Frage in diesem Zusammenhang: Alle Seiten in diesem 
Projekt werden über 7 Server hinweg aus einem Script generiert. Wenn 
sich ein Benutzer per Basic Authentication auf einem der Server 
anmeldet, liefert der Browser natürlich nur an diesen Server bei 
jedem Zugriff die Authentifizierungsdaten. Er muß sich also auf jedem 
der 7 Server anmelden, um überall erkannt zu werden. Kennt jemand 
einen Trick, um dieses Verfahren zu vereinfachen?

Gruß, Reiner

-- 
Reiner.Kukulies_(at)_Uni-Koeln.DE  *  http://www.uni-koeln.de/~ahs02/

Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive