Datenbank gestützes Loginscript

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbank gestützes Loginscript

    Hallo,

    Wer kann mir bei dem erstellen eines Datenbank gestützen Loginscript helfen.

    Ich möchte folgendes erreichen:

    Ich habe 7 Usergruppen mit den Usern die unterschiedliche Rechte haben sollen.
    Die Usergruppe 1 hat das recht nur die Termine zuändern.
    Die Usergruppe 2 hat das recht nur die Nachrichten zuändern.
    Die Usergruppe 3 hat das recht nur den Shop zuändern
    Die Usergruppe 4 hat das recht die Termine und die Nachrichten zuändern.
    Die Usergruppe 5 hat das recht. die Termine und den Shop zuändern.
    Die Usergruppe 6 hat das recht die Nachrichten und den Shop zuändern.
    Die Usergruppe 7 hat alle Rechte.

    Je nach User mit Passwort soll nun nach dem Anmelden eine Dynamische Seite aufgerufen werden, auf der nur der Bereich auftaucht in den er Änderungen/Eintragungen machen darf.

    Ich habe noch kein Plan wie ich das machen kann, soll heißen, ich habe werder das Script für den Login, noch habe ich eine Peilung wie die Datenbank aussehen muß.

    Also wer kann mir beim erstellen helfen?

    Cu
    Gilbert

    PS: Brauch dafür Codeschnippsel!!!!
    *winks*
    Gilbert
    ------------------------------------------------
    Hilfe für eine Vielzahl von Problemen!!!
    http://www.1st-rootserver.de/

  • #2
    http://www.php4-forum.de/beispiele/login.htm

    das kannst du ja dann levelmässig umbauen

    Kommentar


    • #3
      Das von dir vorgeschlagene Script bringt mich nicht weiter! Was ich aufbauen will, ist ein Webmasterbereich der je nach User/Usergruppe nur das Dynamisch aus der Datenbank anzeigt, was der User auch Darf.

      Cu
      Gilbert
      *winks*
      Gilbert
      ------------------------------------------------
      Hilfe für eine Vielzahl von Problemen!!!
      http://www.1st-rootserver.de/

      Kommentar


      • #4
        Als anregung kannst du dir vielleicht mal
        http://www.terracottasoftware.com/demo
        ansehen.
        das ist ein cookiebasiertes user/gruppen gestütztes loginsystem.
        in dem administrationsbereich Permission Manager lassen sich für user/gruppen für einzelne Verzeichnisse/dateien bestimmte Access-Levels festlegen.
        Der Zugriff lässt sich dann auf zweierlei Methoden begrenzen.
        zum einen kann man im kopf jeder Datei einen Funktionsaufruf
        checkpermission(Wert) durchführen, wodurch alle user/gruppen geblockt werden, die einen niedrigeren access-Level haben als wert.
        Das wolltest du glaube ich nicht.
        die zweite Methode ist, im Sourcecode den Gruppennamen des angemeldeten Users abzufragen, und dann bestimmte links und buttons einfach für bestimmte usergruppen auszublenden.
        if ($SESSIONDATA["groupname"]=="gruppe1") {
        mache irgendwas
        } else {
        mache was anderes
        }

        ich benutze eine ältere und inzwischen stark abgewandelte Version von terracotta und bin sehr zufrieden damit.

        Kommentar


        • #5
          Hi,

          also, ich würde so vorgehen:

          wie das Login funktioniert ist wohl klar.
          Dann gibt's in der DB eine Tabelle mit den Usern und ihren Zugangsdaten und zu welcher Gruppe sie gehören.
          Dann ne Tabelle mit den Gruppendefinitionen, also alle Möglichkeiten drin und halt 0 oder 1 als Werte.
          Soweit die DB.

          Dann nach dem Login auf JEDER Seite ein Skript includen am Anfang, welches den User prüft (Session-gebunden user und password merken) und die Rechte der Gruppe als Array einliest. Und dann eben bei jedem Button, Link und wo auch immer nötig eben abfragen, ob $rechte[7]=1 und wenn nicht dann auch kein Button oder so.
          Bsp: wenn als erste Spalte bei Tabelle Gruppe das Recht für "Termin ändern" steht, dann erscheint der Button/Link "Termin ändern" nur, wenn nach dem includen in $rechte[0]=1 vorhanden ist.

          Alles klar?

          P.S.: habe gerade erst den Beitrag drüber gelesen. Vorsicht! Du hast keine linearen Rechte, also der mit niedrigsten Wert darf nichts und dann immer mehr. zumindest habe ich es so verstanden.

          Kommentar


          • #6
            Hey BrainBug,

            Kannst du mir das mal als Codeschnippsel ausführen. Bin Newbie in diesem Bereich.

            Cu
            Gilbert
            *winks*
            Gilbert
            ------------------------------------------------
            Hilfe für eine Vielzahl von Problemen!!!
            http://www.1st-rootserver.de/

            Kommentar


            • #7
              hmm, na gut, ist bißchen aufwendig, aber okay:

              das wäre der File, den du auf jeder relevanten Seite includen mußt. Dazu mußt du natürlich die Eingabe von User und Password speichern, damit hier wieder zur Verfügung:
              Code:
              <?
              $result = mysql_query("select * from users where (name='$username') and (passwort='$password')");
              $num = mysql_numrows($result);
              
              if ($num == 0) {  // kein User, zurück zum Login
              	include 'pfad/zu/file/mit_login.php';
              	exit();
              	}
              
              $i=0;
              $user_gruppe = mysql_result($result, 0, "gruppe_id"); // welche Gruppe ist der User 
              $result2 = mysql_query("select * from gruppe where (gruppe_id = $user_gruppe)"); // Gruppe selektieren 
              $rechte=mysql_fetch_array($result2);
              ?>
              nun hast du im Array $rechte[] die einzelnen Rechte stehen. du kannst diese entweder über den Index $rechte[0] für z.b. "Termin ändern" oder auch, wenn DB-Spalte der Tabelle gruppe z.b. "termin_aendern" heisst, über $rechte[termin_aendern] ansprechen.

              Und dann immer je nach Bedarf das Recht abfragen und schauen, ob 1 oder 0 bei dieser Gruppe.

              bis dann

              Kommentar


              • #8
                Wenn ich dich richtig verstanden habe muß ich bei der Art von Loginscript auch mit SessionID arbeiten.

                Ich habe mir jetzt folgende Daten gescrieben:

                index.php
                <html>

                <head>
                <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
                <title>Webshop Adminbereich Muster</title>
                <meta name="GENERATOR" content="PFE 32">
                </head>

                <frameset cols="25%,*" border="0" frameborder="0">
                <frame name="login" src="nav.php">
                <frame name="text" src="login.php">
                <noframes>
                <body>

                <p>Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht
                unterstützt.</p>

                </body>
                </noframes>
                </frameset>

                </html>

                die nav.php

                <?php
                print "Sie sind noch nicht angemeldet."
                ?>

                die login.php

                <?php

                $ffa = "font face='Comic Sans MS' size='2'";
                $ffe = "/font";

                print "<center>";
                print "<$ffa>Ammelden zum Webmasterbereich<$ffe><br><br>";
                print "<table width='30%' border='1'>";
                print "<form action method='POST'>";
                print "<tr><td><$ffa>Loginname: <$ffe></td><td><input type='text' name='user'></td></tr>";
                print "<tr><td><$ffa>Passwort: <$ffe></td><td><input type='text' name='passwort'></td></tr>";
                print "<tr><td colspan='2'><input type='SUBMIT' name'eintretten' value='Webmasterbereich betretten'></td></tr>";
                print "</form>";
                print "</table>";
                ?>

                und die user.inc.php

                <?
                include("data_db.inc.php");
                $db = mysql_connect("$MySQL_Host","$MySQL_User","$MySQL_Passw") or die (mysql_error());
                mysql_select_db("$MySQL_Data");
                $res = mysql_query("select * from user where (usr='$user') and (pwd='$passwort')");
                $num = mysql_num_rows($res);

                if ($num == 0) { // kein User, zurück zum Login
                include 'login.php';
                exit();
                }

                $i=0;
                $gruppe = mysql_result($res, 0, "gruppe_id"); // welche Gruppe ist der User
                $res2 = mysql_query("select * from usergruppe where (gruppe_id = $gruppe)"); // Gruppe selektieren
                $rechte=mysql_fetch_array($res2);
                ?>

                in der data_db.inc.php
                stehen nur die Daten für die Datenbank drin.

                Um meine Frage:
                Wohin muß ich aus der login.php springen um zusehen ob und wie der sich anmeldene User hindarf. Und wie bekomme ich dan die nav.php dazu die Links frei zugeben?

                Cu
                Gilbert
                *winks*
                Gilbert
                ------------------------------------------------
                Hilfe für eine Vielzahl von Problemen!!!
                http://www.1st-rootserver.de/

                Kommentar


                • #9
                  also, deine login.php sollte das Formular an den anderen Frame mit nav.php schicken. Dieses nav.php inculde zuerst mal user.inc.php. Diese wiederum solltest du geringfügig abändern:
                  Code:
                  user.inc.php 
                  <? 
                  session_start();
                  
                  if (session_is_registered("myuser") && session_is_registered("mypass")) {
                  	$user=$myuser;
                  	$password=$mypass;
                  	}
                  
                  include("data_db.inc.php"); 
                  $db = mysql_connect("$MySQL_Host","$MySQL_User","$MySQL_Passw") or die (mysql_error()); 
                  mysql_select_db("$MySQL_Data"); 
                  $res = mysql_query("select * from user where (usr='$user') and (pwd='$passwort')"); 
                  $num = mysql_num_rows($res); 
                  
                  if ($num == 0) { // kein User, zurück zum Login 
                  $login_flag=false; 
                  exit(); 
                  }
                  
                  // Anmeldung war erfolgreich, jetzt den Krempel als Session speichern, falls noch nicht passiert
                  if (!session_is_registered("myuser") && !session_is_registered("mypass")) {
                  	session_register("myuser","mypass");
                  	$myuser = $user;
                  	$mypass = $password;
                  	}
                  
                  $i=0; 
                  $gruppe = mysql_result($res, 0, "gruppe_id"); // welche Gruppe ist der User 
                  $res2 = mysql_query("select * from usergruppe where (gruppe_id = $gruppe)"); // Gruppe selektieren 
                  $rechte=mysql_fetch_array($res2); 
                  $login_flag=true;
                  ?>
                  nach dem include von diesem file sollte dein nav.php entweder "Sie sind noch nicht eingeloggt" ausgeben oder wenn $login_flag==true (als Abfrage) dann richtige Navigation, bei der du schon das Array $rechte[] benutzen kannst (je nachdem wird z.B. "Termin ändern" eingeblendet oder nicht).
                  Und das Problem mit dem Speichern ist nun am Anfang der user.inc.php geregelt.
                  Dann mußt du nur noch dafür sorgen, daß beim Reload des Nav-Frames beim erfolgreichen Login der Frame2 mit was neuem geladen wird (Begrüßung oder so)

                  Kommentar


                  • #10
                    Dann mußt du nur noch dafür sorgen, daß beim Reload des Nav-Frames beim erfolgreichen Login der Frame2 mit was neuem geladen wird (Begrüßung oder so) [/B]
                    und wie mache ich das?

                    ich habe das login.php im Form Tag auf logdaten.php und Target probehalber gestellt und habe im login.php eine If Abfrage
                    if ($eintretten)
                    {
                    header("Location: neu.php")
                    }

                    doch er bleibt auf der login.php stehen und läd mir die logdaten.php in den Frame nav.

                    Wie bekomme ich das hin das er jetzt ein Begrüßungsseite läd in den Frame text?

                    Cu
                    Gilbert
                    *winks*
                    Gilbert
                    ------------------------------------------------
                    Hilfe für eine Vielzahl von Problemen!!!
                    http://www.1st-rootserver.de/

                    Kommentar


                    • #11
                      hä?

                      Egal, ich würde es so machen:

                      Formular mit Login in Frame2 als target="Frame1" und action="nav.php" (hier wird dann das Gedöns mit abfrage und Sessionbezogen und so, du weißt schon). Und zusätzlich kannst du beim form-Tag ein onsubmit="document.location.href='neue_datei.php'" angeben. Dann wird automatisch was anderes im Frame2 geladen, während die Daten nach Frame1 geschickt werden.
                      Ist das sinnvoll? Nö! Wenn nämlich Anmeldung nicht korrekt, dann soll da ja wieder Login-Screen kommen.
                      Deshalb bei nav.php einfach bei erfolgreichem anmelden ($login_flag==true) ein JavaScript ausgeben:
                      Code:
                      <script>window.frames[1].location.href='login_okay.php';</script>
                      oder so ähnlich. Aber das onsubmit-Event ist nicht umsonst. Da kannst du während die Daten abgeschickt, überprüft und was weiß ich was werden, in den Frame2 eine Seite mit "Bitte warten..." laden, die dann überladen wird von nav.php aus. Hier kannst du bei fehlgeschlagenem Login gleiches Javascript benutzen/ausgeben, welches aber wieder die Loginseite nach Frame2 lädt.
                      Alles klar? Wenn nicht, sag wo's happert.

                      Kommentar


                      • #12
                        Meine nav.php hat jetzt folgendes Aussehen:

                        <?php
                        include("user.inc.php");

                        if ($login_flag==true)
                        {
                        print "Sie sind angemeldet.";
                        }
                        else
                        {
                        Print "Sie sind nicht angemeldet.";
                        }
                        ?>

                        doch jetzt zeigt sie garnichts an.

                        Newbie Fehler oder steh ich auf dem Schlauch?????
                        *winks*
                        Gilbert
                        ------------------------------------------------
                        Hilfe für eine Vielzahl von Problemen!!!
                        http://www.1st-rootserver.de/

                        Kommentar


                        • #13
                          wenn's da nicht weitergeht, dann liegt's wohl am include-File. Zuerst mal error_reporting(255); als ersten Befehl. Was wird ausgegeben? Und wie sieht die user.inc.php denn nun aus? Ist da wohl ein Fehler drin?
                          Ja, melde dich wenn du mehr weißt...

                          also an der nav.php liegt es nicht. Die ist okay.

                          Kommentar


                          • #14
                            Die Fehlermeldung kommt:

                            Warning: Undefined variable: user in c:\apache\htdocs\login\user.inc.php on line 12

                            Warning: Undefined variable: passwort in c:\apache\htdocs\login\user.inc.php on line 12
                            *winks*
                            Gilbert
                            ------------------------------------------------
                            Hilfe für eine Vielzahl von Problemen!!!
                            http://www.1st-rootserver.de/

                            Kommentar


                            • #15
                              stell mal das error_reporting runter!

                              Entweder in der php.ini: error_reporting = E_ALL &~ E_NOTICE
                              oder am Anfang des Skripts: error_reporting (E_ALL &~ E_NOTICE);
                              mein Sport: mein Frühstück: meine Arbeit:

                              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                              Kommentar

                              Lädt...
                              X