Ankündigung

Einklappen
Keine Ankündigung bisher.

Denkanstoß Umsetzung Benutzerverwaltung

Einklappen

Neue Werbung 2019

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

  • Denkanstoß Umsetzung Benutzerverwaltung

    Verschiedene User werden in einer DB in der Tabelle User gespeichert
    Der Tabellenaufbau ist im Moment
    User_ID; User; Passwort; Level

    Es wird aber wahrscheinlich noch eine Tabelle dazukommen
    Wo es dann User Gruppen gibt
    Der Tabellen aufbau soll dann so sein
    Gruppen_ID; User_ID; Gruppe_01; Gruppe_02; Gruppe_03; Gruppe_04; Gruppe_05; Gruppe_06; Gruppe_07; Gruppe_08; Gruppe_09; Gruppe_10

    Die Gruppen sind dann als Enum (N/J) um den zugriff zu erlauben
    Diese kann ich ja leicht in der Session Ablegen als $_SESSION['Gruppe_01']

    mein Kopf vorm Brett ist die Umsetzung in den einzelnen Scripten

    soll dann für jede Gruppe ein eigenes Script geschrieben werden
    oder ein Script für Alle Gruppen?

    LÖSUNG 1:
    Content_Gruppe_01.php
    Content_Gruppe_02.php
    Content_Gruppe_03.php
    wo man nur für diese Gruppen den Zugriff hat

    oder ein Script
    LÖSUNG 2:
    Content.php
    mit inhalt
    PHP-Code:
    <?PHP
    IF ($_SESSION['Gruppe_01']=='J')
    {
         
    #anzeige für Gruppe 1 Betreffenden Code
         
    ECHO "<INPUT TYPE=BUTTON VALUE=Anzeige>";
    }
    IF (
    $_SESSION['Gruppe_02']=='J')
    {
         
    #anzeige für Gruppe 2 Betreffenden Code
         
    ECHO "<INPUT TYPE=BUTTON VALUE=Bearbeiten>";
    }
    IF (
    $_SESSION['Gruppe_03']=='J')
    {
         
    #anzeige für Gruppe 3 Betreffenden Code
         
    ECHO "<INPUT TYPE=BUTTON VALUE=Löschen>";
    }
    ?>
    wo ich gerade beim Korrekturlesen bin, Erkenne ich das wenn einer Rechte Gruppe_01
    und Gruppe_03 hat Lösung 1 nicht funktioniert Lösung 2 jedoch schon


    Dann kommt noch dazu das Ein Kennwort für die Komplette DB zu nehmen
    weils recht Einfach ist oder einzelne Kennwörter für jede Gruppe was den Programmierschwierigkeitsgrad wiederum erhöht.

    Suche aber keine Fertigen Script Lösungen sondern einfach bessere Ideen
    die sich vieleicht sogar leichter umsetzen lassen. Beziehungsweise
    eine Resonanz. Negativ und Positiv
    Manchmal aber nur Manchmal sehe ich den Wald vor lauter Bäumen nicht mehr


  • #2
    Die Gruppen würde ich nicht als einzelne Spalten machen, sondern die Tabelle so machen das der user und die gruppe ein zusammengesetzter PR ist. Und dann fragst bei deinen einzelnen Stellen nur noch ab ob der jeweilige Nutzer mit der jeweiligen Gruppe in der Tabelle vorhanden ist.
    Look at This!
    Digital-Duty.DE
    Für Syntax-Fehler übernehme ich keine Haftung!

    Kommentar


    • #3
      Ich glaube zwar Tholi meint das selbe, aber bin mir da net sicher

      Code:
      #User-Tabelle
      User_ID;  -> PK
      User; 
      Passwort
      
      #Group-Tabelle
      Group_ID;  -> PK
      Name;
      
      User_Group_xref
      User_ID;   -> kombinierter PK
      Group_ID; -> kombinierter PK
      Dann einfach mit der User_ID & Group_ID checken ob ein Eintrag in der xref ist
      "My software never has bugs, it just develops random features."
      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

      Kommentar


      • #4
        Für mich zum besseren Verständnis
        User Tabelle
        User_ID
        User

        Gruppen Tabelle
        Gruppen_ID
        Gruppe

        User_Gruppe Tabelle
        User_ID Feldinhalt User_ID+Gruppen_ID
        Gruppen_ID Feldinhalt User_ID+Gruppen_ID

        Wenn:
        User_ID=1
        Gruppen_ID=1

        Dann steht in der User_Gruppen Tabelle
        User_ID = 11
        Gruppen_ID = 11

        Die SQL Abfrage sieht dann so aus

        SELECT * FROM user_gruppe WHERE User_ID=11 AND Gruppen_ID=11

        Hoffe das ist so richtig
        Ich weis das recht
        Manchmal aber nur Manchmal sehe ich den Wald vor lauter Bäumen nicht mehr

        Kommentar


        • #5
          Nein.
          Dann steht in der xref:
          User_ID = 1
          Group_ID = 1;


          das SQL könnte dann so in der art aussehen:
          Code:
          $userID = 1;
          $groupID = 1;
          $sql = 'SELECT count(user_id) 
                  FROM User_Group_xref 
                  WHERE User_ID='.$userID.' AND Group_ID='. $groupID;
          Und wenn das Ergebnis > 0 ist, dann hat der User das recht dieser Gruppe...
          "My software never has bugs, it just develops random features."
          "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

          Kommentar


          • #6
            Okay Dann habe ich dies hoffentlich richtig verstanden.


            User_ID = 1
            Group_ID = 1;


            das SQL könnte dann so in der art aussehen:
            Code:

            $userID = 1;
            $groupID = 1;
            $sql = 'SELECT count(user_id)
            FROM User_Group_xref
            WHERE User_ID='.$userID.' AND Group_ID='. $groupID;

            Und wenn das Ergebnis > 0 ist, dann hat der User das recht dieser Gruppe...

            Ist nur noch die Frage wie Richtig ins Script Einbauen
            Am Besten mit Einer Klasse Namens SchreibSiedirdoch
            Oder einer Funktion Machdirdocheine

            [LautDenkschreibModus]

            Am Script Beginn erstmal eine Abfrage ob es gestattet ist sich die
            Seite anzeigen zu lassen. Bei Nichtgestattet Meldung im Content Bereich
            Ist nur Bei Direkt Aufruf der Seite nötig.
            Im Menu Schon eine Abfrage Integriert Die die Menu Einträge Steuert



            und im Script mittels IF Abfrage ob die Anzeige
            von einen Link oder Button gemacht werden soll

            Das Ganze in eine Funktion Verpacken
            mit Rückgabe Wert von Richtig oder Falsch
            [/LautDenkschreibModus]
            Manchmal aber nur Manchmal sehe ich den Wald vor lauter Bäumen nicht mehr

            Kommentar


            • #7
              Du könntest beispielsweise,
              bei jedem script welches eine Authenthifizirung braucht, oben eine Abfrage einbauen, sowas in der Art
              PHP-Code:
              <?php
              if (!checkAuth($userID$groupID)) {
                  exit(
              'Keine Berechtigung für diese Seite!');
              }
              oder
              PHP-Code:
              <?php
              if (!checkAuth($userID$groupID)) {
                  
              header('Location: index.php?error=auth');
              }
              Es gibt viele Möglichkeiten... such dir eine aus, oder überleg dir ne bessere... die gibt es sicherlich...

              Wenn du mit OOP bzw. MVC arbeitest könntest du das auch in den einzelnen Funktionen(Action) überprüfen...
              "My software never has bugs, it just develops random features."
              "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

              Kommentar


              • #8
                wenn Dein User nur in genau einer Gruppe sein kann,
                dann brauchst sie Tabelle User_Group_xref nicht.


                Dann reicht ne Verknüpfung über Fremdschlüssel:

                Tabelle User
                id ---- name ---- groupid

                Tabelle Group
                id --- groupname
                Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                Kommentar


                • #9
                  Zitat von Koala Beitrag anzeigen
                  wenn Dein User nur in genau einer Gruppe sein kann,
                  dann brauchst sie Tabelle User_Group_xref nicht.


                  Dann reicht ne Verknüpfung über Fremdschlüssel:

                  Tabelle User
                  id ---- name ---- groupid

                  Tabelle Group
                  id --- groupname


                  Nope:

                  Ein User kann in mehreren Gruppen sein.
                  In einer Gruppe können mehrere User sein.

                  Ergo: N zu M - Daher brauchen wir eine Zwischentabelle...
                  "My software never has bugs, it just develops random features."
                  "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                  Kommentar


                  • #10
                    ich hab doch geschrieben:
                    wenn Dein User nur in genau einer Gruppe sein kann
                    Ein User kann in mehreren Gruppen sein.
                    woher willst Du das denn wissen ?

                    In einer Gruppe können mehrere User sein.
                    so what ? das stört bei nicht.
                    Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                    Kommentar


                    • #11
                      Naja wenn er eine Benutzerverwaltung schreiben möchte.
                      Geh ich davon aus:

                      -dass eine Gruppe für eine bestimmte Seite steht
                      -dass dort der einzelne Zugriff auf bestimmte Seiten beschränkt werden soll (Gruppen haben mehere User).
                      -dass da einzelne User (bspw. in einem Backend) aber mehere Seiten aufrufen können, weise ich den einzelnen Seiten Gruppen zu... (User können in mehreren Gruppen sein)
                      "My software never has bugs, it just develops random features."
                      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                      Kommentar


                      • #12
                        ich habe das folgendermaßen festgelegt.(vllt interessierts ja jemanden)

                        users
                        id | username | passwort | session_id | last_action
                        1 | mmustermann| md5(123) | 0 | 0
                        groups
                        id | name | level
                        1 | user | 1
                        2 | moderator | 2
                        3 | admin | 100
                        4 | serverroot | 1000

                        usergroups
                        id | user_id | group_id
                        1 | 1 | 1
                        2 | 1 | 2

                        nach dem login oder bei der prüfung ob man eingelogt ist, holt man sich die user id und dann kann man auch gleich die rechte holen mit
                        SELECT g.level as level FROM groups g, usergroups ug WHERE ug.group_id = g.id AND ug.user_id = $userId

                        while($row = $sql){
                        $_SESSION['userRights'][]= $row->level;
                        }

                        danach kann man ein rechte array für die seiten erstellen, um festzulegen welche rechte man für welche seite benötigt. danach ein count auf array_intersect ausführen , um zu sehen wieviele gleiche array werte man hat und wenn es größer als 0 ist, dann hat man die nötigen rechte.

                        hat bis jetzt einwandfrei funktioniert

                        MFG
                        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                        Kommentar


                        • #13
                          seh ich nicht so:
                          ein User kann in der Gruppe "Admin", "Redakteur" oder "Noob" sein.
                          Wobei Admin alles machen darf, Redakteur nur bestimmte Seiten ändern
                          und Noob gar nichts.

                          Ein User kann aber nicht gleichzeitig Noob und Admin sein.

                          Wenn Du eine Userverwaltung richtig kompliziert machen willst,
                          dann kannst noch zulassen daß Userrechte vor Gruppenrechten gelten
                          und daß für jede einzelne Seite noch festgelegt werden kann was mit ihr
                          gemacht werden darf.
                          Du hast dann also drei Ebenen: User, Gruppe und Seitenobjekt.
                          (siehe Rechteverwaltung bei phpBB).

                          edit:
                          und genau bei dem Beispiel von blackscorp ist die dritte Tabelle "usergroups" unnötig,
                          weil ein User nicht gleichzeitig in der Gruppe "User" und "Serverroot" sein kann.
                          Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                          Kommentar


                          • #14
                            Naja wir sind halt das Problem aus anderen Sichten angegengen...
                            Ich wollte für jede Seite/Aktion einzelne Zugriffavariablen setzten.
                            Ist IMHO ein wenig flexibler.

                            Klar geht deine Lösung ebenfalls. Habe ich auch niemals anzeweifelt.
                            In geposteten Code-Beispiel des TE's, sollte er wohl deine Lösung nehmen und die Zwischen-Tabelle entfernen.

                            Zitat von Koala Beitrag anzeigen
                            seh ich nicht so:
                            Ein User kann aber nicht gleichzeitig Noob und Admin sein.
                            richtig, aber wenn beide bspw. auf die selbe Seite gehen können, nur das ein Redakteur nur bearbeiten kann, aber nicht löschen und Noob nur ansehen usw. finde ich meinen Lösungsansatz dann doch besser... Ist aber wohl alles Ansichtssache und sollte auch den Bedürfnissen entsprechend benutzt werden.

                            Zitat von Koala Beitrag anzeigen
                            ... daß für jede einzelne Seite noch festgelegt werden kann was mit ihr gemacht werden darf. ...
                            So hab ich das auch gemeint. Sodass bei meinem Ansatz jede Seite festlegt wer sie bearbeiten darf.
                            Code:
                            User:
                            id | name
                            ----------
                            1  | Ich
                            2  | du
                            
                            
                            Gruppe:
                            id | name
                            ----------
                            1  | news_ansehen
                            2  | news_bearbeiten
                            3  | news_loeschen
                            #... usw
                            
                            User_Gruppe:
                            user_id | group_id
                            ----------
                            1  | 1
                            1  | 2
                            1  | 3
                            2  | 1
                            2  | 2
                            in diesem Bsp darf "ich" alles und und "du" nur ansehen und bearbeiten...

                            Finde ich persönlich flexibler. Mehr Aufwand, aber flexibler
                            "My software never has bugs, it just develops random features."
                            "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                            Kommentar


                            • #15
                              Sind alles im allen recht gute Ansätze
                              es kommt natürlich darauf an in wie weit man verschiedene Rechte Vergeben will
                              mit Drei Tabellen User; Group; User_Group kann man wesentlich feinfühliger
                              Rechte vergeben

                              z.B.
                              Gruppen
                              Lieferant Lesen
                              Lieferant Anlegen; Bearbeiten
                              Katalog Lesen
                              Katalog Anlegen; Bearbeiten

                              User 1 darf die Lieferanten ansicht öffnen
                              User 2 darf die Lieferanten Ansicht öffnen und auch Anlegen/Bearbeiten
                              User 3 und 4 darf das gleiche beim Katalog jewels die einen kommen bei den
                              anderen nicht hinein.

                              In Wie weit dies natürlich Sinnvoll ist ist immer eine
                              Frage die man natürlich bis Ende nie Diskutieren kann

                              Habe mich Entschieden 3 Tabellen anzulegen

                              Tabelle User
                              User_ID;User;Passwort

                              Tabelle Gruppe
                              Gruppe_ID;Gruppe

                              Tabelle User_Gruppe
                              User_Gruppe_ID; User_ID; Gruppe_ID

                              eine Kleine Funktion
                              PHP-Code:
                                  FUNCTION AUTH($User,$Gruppe)
                                  {
                                      
                              $SQL="SELECT * FROM user_gruppe WHERE User_ID=$User AND Gruppe_ID=$Gruppe";
                                      
                              #ECHO "SQL:$SQL<br>";
                                      
                              $Result=SQL_QUERY($SQL);
                                      
                              $Zeilen=SQL_ROW($Result);
                                      IF (
                              $Zeilen>0)
                                      {
                                          
                              $Zugriff=True;
                                      }
                                      ELSE
                                      {
                                          
                              $Zugriff=False;
                                      }
                                      RETURN 
                              $Zugriff;
                                  } 
                              und die Abfrage im Eigentlichen Script

                              PHP-Code:
                                  IF (Auth($_SESSION['User_ID'],1)==False)
                                  {
                                      ECHO 
                              "Keine Rechte";
                                      EXIT;
                                  } 
                              So kann ich meiner Meinung nach leichter Abfragen Steuern
                              Bei der DARFICHABFRAGE False auf True getauscht und das
                              ganze hält sich dann so in grenzen
                              Manchmal aber nur Manchmal sehe ich den Wald vor lauter Bäumen nicht mehr

                              Kommentar

                              Lädt...
                              X