Projektarbeit Reitvereinmanagementsystem (RVMS) Dokumentation der Anmeldefunktionen Seite 1 von 17
INHALTSVERZEICHNIS Anmeldung zu den einzelnen Modulen...3 Schritt 1: Anmeldung... 3 Schritt 2: Modulmöglichkeiten... 4 Schritt 3: Modulauswahl... 5 Abmelden in den einzelnen Modulen...6 Realisierung der Anmeldung...7 Die Idee... 7 Die Datenbank... 8 Die Umsetzung... 9 Schritt 1: Anmeldung...9 Schritt 2: Modulmöglichkeiten... 11 Schritt 3: Modulauswahl... 13 Realisierung der Abmeldung...14 Anhang:...15 Beispiel... 15 Rechteverteilung... 16 Seite 2 von 17
Anmeldung zu den einzelnen Modulen Schritt 1: Anmeldung Die Anmeldung zu den einzelnen Modulen findet sich auf der Internetseite des Reitverein Pfullendorf. Unter dem Menüpunkt Login ist das Anmeldeformular für die Module: Seite 3 von 17
Schritt 2: Modulmöglichkeiten Nach erfolgreicher Anmeldung sind alle Module aufgeführt für die man mindestens das Recht lesen besitzt. Seite 4 von 17
Schritt 3: Modulauswahl Die einzelnen Module werden dann in einem neuen Fenster geöffnet Seite 5 von 17
Abmelden in den einzelnen Modulen In jedem der einzelnen Module ist dieselbe Logout-Funktion zu integrieren. Durch das anklicken der Logout-Funktion wird der User in allen Modulen abgemeldet. Seite 6 von 17
Realisierung der Anmeldung Die Idee Die Idee war, dass man die Anmeldung zu den einzelnen Modulen zentralisiert Anmeldung über eine zentrale Seite im Internet Auflistung der erlaubten Module Öffnen der Modulen durch Klick in neuem Browser Der Vorteil besteht darin, dass der User eine einheitliche und übersichtliche Anmeldung hat. Die Anmeldung soll hohe Sicherheit bieten, d.h. die Anmeldung funktioniert auch ohne dass Cookies aktiviert sind es ist nicht möglich, die URL mit der Session-ID kopiert an einem anderen Rechner zu verwenden nach bestimmter Zeit wird der User automatisch ausgeloggt Dies soll dadurch geschehen, dass der User mit der Anmeldezeit, der IP-Adresse des Rechners, dem aktuellen Log-Status und mehr beim Anmelden in der Datenbank gespeichert wird. Dann haben wir uns ein Konzept für die Vergabe der Rechte an die einzelnen User, Gruppen und Modulen überlegt: Jeder User muss einer Gruppe angehören. Die Gruppe besitzt die einzelnen Rechte für die einzelnen Module. Eine Person kann in mehreren Gruppen sein. Seite 7 von 17
Die Datenbank Dadurch haben wir dann das folgende Datenbankmodell entwickelt: t_rechte PK,FK1 id beschreibung t_modul PK,FK1 id t_gruppen_rechte PK,FK2 id FK5 modul_id FK6 gruppen_id FK7 rechte_id modul t_gruppen PK id name t_person_gruppe t_personen PK,FK1 id PK id FK3 FK2 PK FK1 personen_id gruppen_id phpwcms_userlog userlog_id logged_user logged_username logged_start logged_change logged_in logged_ip id vorname name strasse postleitzahl ort geburtsdatum telefon handy email passwort login beschreibung versinsmitgl typ einzugsermaechtigung timestamp jugendlich inaktive Seite 8 von 17
Die Umsetzung Schritt 1: Anmeldung Zur Anmeldung werden User-Login und ein Passwort benötigt. Diese werden dann mithilfe einer SQL-Anweisung mit den Einträgen in der Datenbank (Tabelle t_personen) verglichen. Wenn der User mit dem User-Login nicht gefunden wird, erscheint erneut das Login- Formular. Das Passwort ist zu Sicherheit mit MD5 verschlüsselt. Diese Verschlüsselung wurde gewählt, da die 128 Bit langen MD5-Hashes (englisch auch "message digests") normalerweise als 32- stellige Hexadezimalzahl notiert werden. Folgendes Beispiel zeigt eine 59 Byte lange ASCII-Eingabe und den zugehörigen MD5-Hash: md5("franz jagt im komplett verwahrlosten Taxi quer durch Bayern") = a3cca2b2aa1e3b5b3b5aad99a8529074 Eine kleine Änderung der Nachricht erzeugt (mit sehr großer Wahrscheinlichkeit) einen komplett anderen Hash. Mit Frank statt Franz (nur ein Buchstabe verändert) ergibt sich: md5("frank jagt im komplett verwahrlosten Taxi quer durch Bayern") = 7e716d0e702df0505fc72e2b89467910 Der Hash eines Strings der Länge Null ist: md5("") = d41d8cd98f00b204e9800998ecf8427e Dies bietet die für uns nötige Sicherheit. Im Fall einer erfolgreichen Anmeldung werden die benötigten Eigenschaften des Users in die gestartete SESSION geschrieben. Dazu gehört unter anderem die User- ID und der User- Login, die später immer wieder benötigt werden. Als nächster Schritt wird in der Tabelle phpwcms_userlog nach dem angemeldeten User gesucht. Ist dieser vorhanden werden seine Login-Daten aktualisiert. Wenn er in der Tabelle noch nicht vorhanden ist, wird er hinzugefügt. Zu den Login-Daten in der Tabelle phpwcms_usserlog gehören: Feldname logged_user Erklärung Name des Users Seite 9 von 17
logged_username User-Login logged_start Zeitpunkt des Einloggens logged_change Zeitpunkt der letzten Aktualisierung logged_in 1 für eingeloggt 0 für ausgeloggt logged_ip Die IP- Adresse des Rechners des Users Das alles ist in der Datei login.php zu finden. Auszug aus der phpwcms_userlog: Seite 10 von 17
Schritt 2: Modulmöglichkeiten Um die unterschiedlichen Berechtigungen des Users für die einzelnen Module zu realisieren haben wir uns folgendes überlegt: Für jedes Recht wird ein Bit in einer Variablen definiert. Bit Byte-Wert Recht 0 0000001 Lesen 1 0000010 Schreiben 2 0000100 Ändern 3 0001000 Erzeugen 4 0010000 Löschen Sind alle Rechte gesetzt ergibt sich folgender Byte-Wert: 00011111 Sind die Rechte zu lesen, ändern und erzeugen gesetzt, so ergibt sich der Wert 00001101. Jeder User muss wie vorher definiert zu mindestens einer Gruppe gehören. Der Gruppen werden die Rechte für die einzelnen Module zugewiesen. Welche Gruppe welche Rechte hat können sie im Anhang finden. Um nun die Rechte des Users für die einzelnen Module zu bekommen, wird aus der Datenbanktabelle t_person_gruppe ausgelesen zu welchen Gruppen der User gehört. Dann werden aus der Tabelle t_gruppe_rechte die Rechte der Gruppen für die einzelnen Module ausgelesen und in die entsprechenden Variablen aufaddiert $modulrechte["mitglied"] = bit_or($modulrechte["mitglied"], $rechte); $modulrechte["stunden"] = bit_or($modulrechte["stunden"], $rechte); $modulrechte["fibu"] = bit_or($modulrechte["fibu"], $rechte); $modulrechte["stall"] = bit_or($modulrechte["stall"], $rechte); $modulrechte["cms"] = bit_or($modulrechte["cms"], $rechte); $modulrechte["veranstalt"] = bit_or($modulrechte["veranstalt"], $rechte); und in die SESSION geschrieben: $_SESSION["modulrechte"]=$modulrechte; Mithilfe der Funktion bit_or werden die Rechte ganz einfach mit einer vorgefertigten PHP- Funktion aufaddiert: $modul_r = '0000001'; $modul_r =$modul_r '0000010'; Die Variable $modul_r besitzt nun den Wert '0000011'. Wenn nun der User wenigstens das Recht des Lesens hat, wird das Modul aufgelistet. Dies kann mit der Funktion bit_and geprüft werden. Seite 11 von 17
$recht = bit_and($modulrechte[$value], '0000001') $recht ist 0 wenn der User das gewünschte Recht hat und es wird ein Link ( mit der Session- ID ) zu dem Modul ausgegeben. Seite 12 von 17
Schritt 3: Modulauswahl Per Mausklick wird das Modul in einem neuen Browser geöffnet. Beim Öffnen des Moduls wird überprüft, ob der User noch oder überhaupt eingeloggt ist. Dies wird mit der Funktion checklogin geprüft. checklogin($_session['wcs_user']); Dieser Funktion wird der User-Login der Session übergeben. Sie verlängert dann in der Tabelle phpwcms_userlog die eingeloggte Zeit wenn der User eingeloggt war. Wenn es kein User in der Session gibt oder der User schon zu lange nichts mehr gemacht hat, wird der User automatisch ausgeloggt. In beiden Fällen wird der User wieder zum Anmeldeformular springen. Um nun die Rechte zu prüfen, kann man auf die Variable modulrechte der Session zugreifen. In dieser sind die Rechte des Users für die Module gespeichert. Zum Beispiel für das : $modulrechte=$_session["modulrechte"]; $rechte = $modulrechte["cms"]; Zum Testen, ob nun das gewünschte Recht vorhanden ist, gibt es die Funktion bit_and. Dieser wird die Variable der Rechte und die gewünschte Recht übergeben. Es kann aber immer nur ein Recht getestet werden: $ergebnis = bit_and($rechte, '0000001'); #das Recht lesen testen Man bekommt eine 0 zurück, wenn das gewünschte Recht vorhanden ist. Um alle Rechte zu testen: if( (bit_and($rechte, '0010000') == 0) && (bit_and($rechte, '0001000') == 0)&& (bit_and($rechte, '0000100') == 0) && (bit_and($rechte, '0000010') == 0)&& (bit_and($rechte, '0000001') == 0)) { #User hat alle Rechte } Die Funktion bit_and bedient sich dabei der PHP-Funktion der UND-Operation. Test 1 Test 2 Userrechte 0000100 0000001 Benötigte Rechte 0000100 0001000 Ergebnis 0000100 0000000 Seite 13 von 17
Dort wo beide Bit auf 1 gesetzt sind ergibt sich als Ergebnis ein Bitwert von 1. Dort wo mindestens ein 0 steht ergibt sich 0. Realisierung der Abmeldung Wie schon erwähnt gibt es auch eine allgemein Logout-Funktion für die Module. Dieser muss die Session übergeben werden. logout_m_form($_session); Die Funktion meldet den User aus der Tabelle phpwcms_userlog ab und zerstört die Session. Wenn JavaScript im Browser aktiviert ist, wird das Fenster geschlossen uns der User wieder zum Anmeldeformular gebracht. Ansonsten bleibt das Fenster geöffnet und der User bekommt dort wieder das Anmeldeformular. Alle Funktionen für die Implementierung der An- und Abmeldung sind in den Dateien login.php und own/login_inc.php zu finden. Seite 14 von 17
Anhang: Beispiel: Beispiel.php <?php session_start(); include ('./own_inc/login_inc.php'); // --- Testen, ob user eingeloggt und ob er admin-rechte hat ---- checklogin($_session['wcs_user']); $modulrechte=$_session["modulrechte"]; $rechte = $modulrechte["cms"]; if((bit_and($rechte,'0010000') == 0)&&(bit_and($rechte,'0001000') == 0)&& (bit_and($rechte,'0000100') == 0)&&(bit_and($rechte,'0000010') == 0)&& (bit_and($rechte, '0000001') == 0)) { $admin = 1; # User hat alle Rechte } // ---*/ echo User hat admin-rechte ; if ($_POST['do'] == 'logout') logout_m_form($_session);?> <html> <head> <title>beispiel für Login und Logout</title> </head> </body> </body> </html> <a href="beispiel.php?do=logout" target="_top"></a> Seite 15 von 17
Rechteverteilung Gruppe Modul Lesen Schreiben Löschen Eintragen Ändern 1.Vorsitzender Reitstundenverwaltung x x x x x FiBu x x x x x Mitgliederverwaltung x x x x x x x x x x Stall x x x x x Veranstaltungen x x x x x 2.Vorsitzender Reitstundenverwaltung x x x x x FiBu x x x x x Mitgliederverwaltung x x x x x x x x x x Stall x x x x x Veranstaltungen x x x x x Geschäftsführer Reitstundenverwaltung x FiBu Mitgliederverwaltung x x x x x x Stall x Veranstaltungen x Kassenwart Reitstundenverwaltung x FiBu x x x x x Mitgliederverwaltung x x x x x x Stall x x x x x Veranstaltungen x Jugendwart Reitstundenverwaltung x FiBu Mitgliederverwaltung x Stall Veranstaltungen x Stallaufsicht Reitstundenverwaltung x FiBu Mitgliederverwaltung x x Stall x x x x x Veranstaltungen x Vorstand Reitstundenverwaltung x erweitert FiBu Mitgliederverwaltung x Stall x Veranstaltungen x Seite 16 von 17
Reitlehrer Reitstundenverwaltung x x x x FiBu Mitgliederverwaltung x Stall x Veranstaltungen x x x x Reitschüler Reitstundenverwaltung x x FiBu Mitgliederverwaltung Stall Veranstaltungen x x Mitglied Reitstundenverwaltung passiv FiBu Mitgliederverwaltung Stall Veranstaltungen Gast Reitstundenverwaltung x x FiBu Mitgliederverwaltung Stall Veranstaltungen Administrator Reitstundenverwaltung x x x x x FiBu x x x x x Mitgliederverwaltung x x x x x x x x x x Stall x x x x x Veranstaltungen x x x x x Stallpersonal Reitstundenverwaltung FiBu Mitgliederverwaltung Stall x x Veranstaltungen Seite 17 von 17