leserechte / zugriffsrechte oder so...

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

  • leserechte / zugriffsrechte oder so...

    Hallo zusammen

    ok vielleicht ist das jetzt eine absolut doofe frage, ev. auch schon x-mal überall behandelt worden, trotzdem habe ich nach langem googeln und forums durchforschen keine antwort auf mein problem gefunden...

    Ich habe eine Tabelle mit verschiedenen usern, diese user sind auf ein paar wenige Admins aufgeteilt welche wiederum einen "ober"Admin haben. jeder user sollte nur auf "seine" Daten zugriff haben. das würde ich mit session anmeldung und user id überprüfung lösen... (oder gibts da einwände? / bessere vorschläge?)

    Aber wie gebe ich dem Admin und dem "ober"Admin das recht das er die daten einiger ausgewählten oder aller user anschauen kann? da hab ich echt einen knopf...

    kann mir jemand von euch helfen? das wäre supergenial!!!

    im voraus schon mal besten dank
    dani

  • #2
    Also wenn es sich um Rechte handelt, dann habe ich letztens noch etwas Entwickelt. Ich habe die Gesamtheit der Dateien in einer Datenbank. Dazu unter den Logindaten ein Feld mit Rechten.

    Nehmen wir an, dass du ein Array aus den vorhandenen Dateien bastelst:

    Code:
    array( 1 => "schrott.doc",
               2 => "datei.exe",
               3 => "andere.exe",
               4 => "bla.endung");

    So... Dann könntest du dazu ja analog ein Array bauen, wo Du die Rechte festhälst:

    Code:
    array( 1 => "1",
               2 => "0",
               3 => "0",
               4 => "1");
    Dieses Array könntest Du mittels Serialize in die Datenbank eintragen.
    Beim Login mit unserialize rausholen, und das Array in die Session eintragen. Wenn dann jemand auf die Datei klickt, wird in der Session geprüft, ob er dies überhaupt darf.


    Vielleicht konnte ich dir deinen Gedankenanstoß liefern.


    Gruß

    David
    Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

    Kommentar


    • #3
      Der Ansatz ist durchaus brauchbar, hat jedoch einen kleinen Haken - mußt selbst entscheiden, ob dich das stört.

      Mit dem Speichern der Rechte in den Usersessions erzeugst du einen zweiten Speicherlevel, der mit dem ersten (DB) synchronisiert werden muß.

      Beispiel: Die Rechte zu den Objekten werden beim Login in die Session geschrieben. Will ein User auf ein Objekt zugreifen, wird in seine Session geschaut, ob er das darf. Nun könnte sich seit dem Anlegen der Session und dem Prüfen der Zugriffsrechte ein Admin eingeloggt und einige Rechte verändert haben. Die stehen dann erstmal nur in der Datenbank, nicht in den Sessions bereits eingeloggter User.

      Somit sind Änderungen von Rechten nie sofort wirksam, was ich persönlich für ziemlich unpraktisch halte. Denn wenn ein Admin mal etwas komplett sperren möchte, nimmt er allen die Rechte weg, weiß aber nicht, ab wann tatsächlich niemand mehr Zugriff hat.

      Da kann man sich nun natürlich wieder was einfallen lassen. Etwa ein DirtyFlag in eine Config schreiben, wenn Rechte verändert wurden und dann müssen alle Sessions neu aus der DB bestückt werden. Aber das hieße, bei jedem Zugriff auf ein Objekt dieses Flag überprüfen. Da kannst du dann gleich die Rechte immer live aus der DB lesen, ist schließlich auch nicht mehr Aufwand.

      Fazit: Je nachdem, was du wie genau schützen möchtest, könnte eine 2. Ebene der Speicherung (Sessions) und die damit verbundene Synchronisation mehr Aufwand und weniger Sicherheit bedeuten, als die fragliche Berechtigung stets aktuell aus der DB zu holen.

      Kommentar


      • #4
        zwischendurch herzlichen dank für eure Antworten...

        vielleicht noch als ergänzung... (oder besser erklärt)

        sämtliche zahlen sind einfach aus dem ärmel geschüttelt es können auch mehr oder weniger sein...

        ich habe 20 user
        5 admins (jeder admin hat 4 user unter sich)
        und einen "oberadmin" der steht über allen und sollte auch alle daten sehen.

        jeder user hat die möglichkeit soviele tabelleneinträge wie er möchte zu machen. Diese tabelleneinträge werden von seinem admin ergänzt (auf jeden fall!) und der oberadmin soll das was die unteren zwei machen einfach anschauen können, nach lust und laune...

        jeder user darf aber nur gerade seine tabelleneinträge sehen.

        wenn ich das mit 0 und 1 löse, habe ich genau dort das problem dass 0 und 1 ja nicht jedem einzelnen user ein eigenes recht zuweisen kann (oder begreiff ich das einfach nicht? denn gelesen habe ich schon sehr viel von dieser variante kann mir aber nicht vorstellen wie ich das auf meine struktur adaptieren soll)

        betreffend admin ändert rechte ab, eigentlich wollte ich den admin nur auf der "benutzerseite" als admin, der sollte gar nicht in die datenbank rein sehen sonder dem gebe ich die möglichkeit von aussen daten abfragen und einträge abändern zu können....

        oder bin ich jetzt total auf dem falschen weg und das ist gar nicht machbar so?

        Kommentar


        • #5
          Bsp. einer einfachen Zugriffsrechtverwaltung:

          - du hast bestimmt eine Tabelle, die deine Navigation enthält.
          - du hast eine Usertabelle
          - du baust jetzt eine 3. Tabelle auf, die die userid und navid enthält
          - bei Anzeigen der Navigation prüfst du die Existenz der Einträge in dieser Tabelle und baust entsprechend das Menü auf.
          - zusätzlich, um Quer-Einsteiger abzufangen (z.B. durch Direkteingabe in die Adressen von Browser), prüfst du am Anfang jeder Seite nochmals, ob der User tatsächlich Zugriffrecht besitzt, wenn nicht Redirect auf die Startseite, oder Hinweis ausgeben ...

          et voilà ...

          Das Ganze kannst du natürlich auf Benutzergruppen, Menügruppen, etc. erweitern.

          Kommentar


          • #6
            @onemorenerd

            Ich habe es ja mit einem Flag gelöst. Sobalt die Rechte aktualisiert sind, und der User irgendeinen Klick ausführt, wird die Session mit den neuen Werten gefüllt.


            @dahasle

            Also stell dir mal folgendes vor:

            tabelle Login:

            Code:
            id username passw rechte
            1   hans        meiser a:12:{i:0;s:1:"1";i:1;s:1:"0";i:2;s:1:"1";
                                                       i:3;s:1:"0";i:4;s:1:"1";i:5;s:1:"0";
                                                       i:6;s:1:"1";i:7;s:1:"1";i:8;s:1:"0";
                                                       i:9;s:1:"1";i:10;s:1:"0";i:11;s:1:"1";}
            
            2   admin       gustav a:12:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:1:"1";
                                                       i:3;s:1:"1";i:4;s:1:"1";i:5;s:1:"1";
                                                       i:6;s:1:"1";i:7;s:1:"1";i:8;s:1:"1";
                                                       i:9;s:1:"1";i:10;s:1:"1";i:11;s:1:"1";}
            Ich hab keine Ahnung, wie ich die Smileys aus dem Serialize-String rausbekomme... Also das heulen gehört nicht dazu



            Dann hast du (sagen wir mal) 12 Dateien. (Die Arrayschlüssel stehen für die ID in deiner Dateien-DB.
            Code:
            HANS:
            Array
            (
                [0] => 1
                [1] => 0
                [2] => 1
                [3] => 0
                [4] => 1
                [5] => 0
                [6] => 1
                [7] => 1
                [8] => 0
                [9] => 1
                [10] => 0
                [11] => 1
            )
            
            Admin:
            Array
            (
                [0] => 1
                [1] => 1
                [2] => 1
                [3] => 1
                [4] => 1
                [5] => 1
                [6] => 1
                [7] => 1
                [8] => 1
                [9] => 1
                [10] => 1
                [11] => 1
            )

            So... Damit gibst du jedem Benutzer seine Individuellen Rechte auf jede einzelne Datei.

            kommt eine neue Datei hinzu, dann nimmst du jeden Eintrag aus der login-DB und fügst an das Array den passenden Array-Schlüssel und den dazu gehörigen Wert hinzu. Wenn du eine Tabelle hast, in denen die Admins sind, dann kannst du die Tabelle auslesen, und sofort die 1 Werte setzen.

            Vielleicht jetzt
            Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

            Kommentar


            • #7
              @Yooda (und indirekt auch an den Threadstarter): Ich sagte ja nicht, dass es so nicht geht. Meinetwegen auch ganz ohne Synchronisation, wenn man damit leben kann, dass Änderungen erst nach Ablauf aller Sessions umfassend wirksam werden. Kommt halt darauf an, was man schützen möchte und wie zeitnah/aktuell der Schutz sein soll.

              Ich erfinde das Rad nicht jedesmal neu, sondern nutze immer die selben Tabellen. Diese bilden exakt das Unix-Rechtesystem ab - auch wenn es manchmal Overkill ist, weil ich zum Beispiel keine Lese-Schreib-Unterscheidung sondern nur Zugriff oder Nicht-Zugriff brauche. Lieber zu viel als zu wenig - zahlt sich aus, wenn man erweitern möchte und plötzlich eine feinere Granularität braucht.
              Fertige Tabellenstrukturen und PHP-Klassen findet man übrigens im Netz.

              Kommentar


              • #8
                Naja, bei mir war das auch noch so eine extra-geschichte...
                Bei mir gibt es die Rechte: Lesen, schreiben status ändern.


                Im Moment hat das array diese Ausmaße


                Code:
                (
                    [content] => Array
                        (
                            [create] => 1
                            [status] => Array
                                (
                                    [1] => 1
                                    [2] => 1
                                    [3] => 1
                                    [4] => 1
                                    [5] => 1
                                    [6] => 1
                                    [7] => 1
                                    [8] => 1
                                    [9] => 1
                                    [10] => 1
                                    [11] => 1
                                    [12] => 1
                                    [13] => 1
                                    [14] => 1
                                    [15] => 1
                                    [16] => 1
                                    [17] => 1
                                    [19] => 1
                                    [20] => 1
                                    [21] => 1
                                    [22] => 1
                                    [47] => 1
                                    [48] => 1
                                    [49] => 1
                                    [50] => 1
                                    [51] => 1
                                    [52] => 1
                                    [53] => 1
                                    [55] => 1
                                    [56] => 1
                                    [57] => 1
                                    [58] => 1
                                    [59] => 1
                                    [60] => 1
                                    [61] => 1
                                    [62] => 1
                                    [63] => 1
                                    [64] => 1
                                    [65] => 1
                                    [66] => 1
                                    [67] => 1
                                    [68] => 1
                                    [69] => 1
                                    [70] => 1
                                    [71] => 1
                                    [72] => 1
                                    [94] => 1
                                )
                
                            [edit] => Array
                                (
                                    [1] => 1
                                    [2] => 1
                                    [3] => 1
                                    [4] => 1
                                    [5] => 1
                                    [6] => 1
                                    [7] => 1
                                    [8] => 1
                                    [9] => 1
                                    [10] => 1
                                    [11] => 1
                                    [12] => 1
                                    [13] => 1
                                    [14] => 1
                                    [15] => 1
                                    [16] => 1
                                    [17] => 1
                                    [19] => 1
                                    [20] => 1
                                    [21] => 1
                                    [22] => 1
                                    [47] => 1
                                    [48] => 1
                                    [49] => 1
                                    [50] => 1
                                    [51] => 1
                                    [52] => 1
                                    [53] => 1
                                    [55] => 1
                                    [56] => 1
                                    [57] => 1
                                    [58] => 1
                                    [59] => 1
                                    [60] => 1
                                    [61] => 1
                                    [62] => 1
                                    [63] => 1
                                    [64] => 1
                                    [65] => 1
                                    [66] => 1
                                    [67] => 1
                                    [68] => 1
                                    [69] => 1
                                    [70] => 1
                                    [71] => 1
                                    [72] => 1
                                    [94] => 1
                                )
                
                            [delete] => Array
                                (
                                    [1] => 1
                                    [2] => 1
                                    [3] => 1
                                    [4] => 1
                                    [5] => 1
                                    [6] => 1
                                    [7] => 1
                                    [8] => 1
                                    [9] => 1
                                    [10] => 1
                                    [11] => 1
                                    [12] => 1
                                    [13] => 1
                                    [14] => 1
                                    [15] => 1
                                    [16] => 1
                                    [17] => 1
                                    [19] => 1
                                    [20] => 1
                                    [21] => 1
                                    [22] => 1
                                    [47] => 1
                                    [48] => 1
                                    [49] => 1
                                    [50] => 1
                                    [51] => 1
                                    [52] => 1
                                    [53] => 1
                                    [55] => 1
                                    [56] => 1
                                    [57] => 1
                                    [58] => 1
                                    [59] => 1
                                    [60] => 1
                                    [61] => 1
                                    [62] => 1
                                    [63] => 1
                                    [64] => 1
                                    [65] => 1
                                    [66] => 1
                                    [67] => 1
                                    [68] => 1
                                    [69] => 1
                                    [70] => 1
                                    [71] => 1
                                    [72] => 1
                                    [94] => 1
                                )
                
                        )
                
                    [termine] => Array
                        (
                            [create] => 1
                            [status] => 1
                            [edit] => 1
                            [delete] => 1
                        )
                
                    [news] => Array
                        (
                            [create] => 1
                            [status] => 1
                            [edit] => 1
                            [delete] => 1
                        )
                
                    [start] => 1
                    [downloads] => 1
                    [user_permissions] => 1
                    [gallery] => Array
                        (
                            [create] => 1
                            [edit] => 1
                            [delete] => 1
                        )
                
                )
                Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

                Kommentar


                • #9
                  @ Yooda ok, begriffen... wenn du mir noch sagen kannst wie sich dieser "code" automatisch generiert wenn der "ober" admin einen admin oder user erstellt bist du definitiv mein Held des Tages (in die entsprechende tabelle schreiben würde ich glaub noch selbst hinbekommen...)

                  Vielen Dank für eure zahlreiche unterstützung, habe heute wieder sehr viel gelernt!!
                  Greez dani

                  PS: wenn noch jemand einen anderen tipp hat, bin ich ganz ohr!

                  Kommentar


                  • #10
                    Naja, ok... dann wollen wir doch mal schauen...
                    Nehmen wir an, es gibt 3 Dateien...

                    bla.exe
                    1.doc
                    12.xls

                    was darf der "Hauptadmin" ??? (lesen, schreiben, löschen.....)
                    was darf der "Unteradmin" ??? (lesen, schreiben, löschen.....)
                    was darf der "Normale User"??? (lesen, schreiben, löschen.....)

                    Wieviele Rechteattribute gibt es?
                    Wann soll ein Recht vergeben werden?
                    Wer vergibt rechte?
                    usw... usw... usw...


                    Die Infos brauch ich noch
                    Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

                    Kommentar


                    • #11
                      Hi,

                      es gibt 3 dateien
                      -> einloggen (passwortüberprüfung etc.)
                      -> allgemeine daten & je nach stufe ev. user erfassung
                      -> spezielle daten die nur vom jeweiligen user und dessen admin's gelesen werden dürfen

                      Hauptadmin darf sämtliche daten lesen (von allen usern)

                      Unteradmin darf daten von "seinen" usern lesen und tabellenzeile vervolständigen

                      user darf nur seine eigenen daten lesen

                      gelöscht wird erst nach 6 monaten...

                      recht soll beim erfassen des jeweiligen user oder unteradmin erfolgen, eigentlich sollten diese rechte nach einer gewissen regel automatisch vergeben werden (die datenbank wird schlussendlich von leuten administriert die noch weniger über rechte wissen als ich...)

                      sonst wär das ganze nicht gar so schwirig wie jetzt...

                      sorry das ich so schwer von begriff bin

                      Kommentar


                      • #12
                        Hm,


                        wenn ich dich jetzt richtig verstanden habe, dann ist es noch nichteinmal nötig das System von mir zu benutzen. Da es sich lediglich um das Recht des Dateien lesens handelt ist dies gar nicht nötig.

                        Da reicht folgendes Prinzip:

                        tabelle user

                        id name passw isadmin groupof
                        1 admin1 po8sfj74 1 0
                        2 admin2 jdhjf94hd 1 2
                        3 admin3 dnfu4jf3k 1 3
                        4 user1 dh8fi4hff 0 1
                        5 user2 fj854hjdf 0 2
                        6 user3 efjfgjgjgf 0 3


                        und eine tabelle dateien

                        id user_id dateiname groupof
                        1 4 bla.txt 1
                        2 4 hallo.exe 1
                        3 5 xyz.dat 2
                        4 6 uvw.zip 3
                        6 6 xyz.rar 3


                        dort kannst du dann als Beispiel folgendes machen:

                        Beim Einloggen schaust du, ob die Person Adminrechte hat... also

                        if($row['isadmin'] == "1"){
                        $_SESSION['isadmin'] = 1;

                        if($row['groupof'] == "0"){
                        // HAUPTADMIN, DER ALLES DARF!!
                        $_SESSION['mainadmin'] = 1;
                        }
                        else{
                        $_SESSION['groupof'] = $row['groupof'];
                        }
                        }

                        damit ist der Admin gesetzt...
                        der darf nun alle dateien auslesen
                        die Unteradministratoren dürfen alles auslesen, was mit dem Wert $_SESSION['groupof'] in der Tabelle Daten ist... so müsste das eigendlich klappen... Hoffe dass ich nicht einen Denkfehler habe...


                        Falls Du fragen hast, stelle diese einfach
                        Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

                        Kommentar


                        • #13
                          @ Yooda

                          jetzt bist du definitiv mein HELD DER WOCHE!!! ganz herzlichen dank!!!!



                          SUPER! jetzt hab ich auch gemerkt wo ich denn knopf hatte... da hätte ich warhscheinlich noch lange gebraucht dabei wärs so naheliegend.

                          MERCI VIEL MAL!
                          Grüsse
                          Dani

                          Kommentar

                          Lädt...
                          X