Mailinglisten-Archive |
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/
php::bar PHP Wiki - Listenarchive