Zugangsberechtigung für User-Typen

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

  • Zugangsberechtigung für User-Typen

    Hi

    Ich habe gerade ein kleines logisches Problem und weiss nicht, wie ich das realisieren soll. Es geht um folgendes:

    Ich habe mir mal spasseshalber angefangen ein Forum zu coden (wer es sehen will / muss). Bisher klappt ja alles ganz gut, aber jetzt würde ich gerne Zugangsberechtigungen für die einzelnen Unterforen einbauen, also so in etwa wie:

    Registrierte Benutzer dürfen schreiben und lesen, nicht Registrierte dürfen nur lesen und nicht schreiben, oder nichts von beidem.

    Wie soll ich das realiseren? Soll ich in der Tabelle in denen ich die Forums gespeichert haben zwei Attribute anlegen "wright" (Schreibrecht) und "rright" (Leserecht). "0" wäre dann "für alle zugelassen" und "1" wäre "nur für registrierte".

    Wenn sich ein User anmeldet wird eine SESSION-Variable "tspb_type" angelegt (0 = User, 1 = Admin), ist der User nicht angemeldet ist die Variable nicht gesetzt... wie realisiere ich jetzt die Zugangsberechtigung am besten? Bin über jeden Vorschlag oder sogar Code-Beispiele froh.
    Zuletzt geändert von pascal007; 14.10.2007, 12:31.

  • #2
    Schau dir mal die ACLs vom Zend Framework an.
    Wir werden alle sterben

    Kommentar


    • #3
      Würde das aber gerne selbst coden (das interessiert mich) und nicht eine fertige Klasse nutzen... trotzdem danke für den Hinweis .

      Kommentar


      • #4
        Habe ich "schauen" oder "benutzen" gesagt?
        Wir werden alle sterben

        Kommentar


        • #5
          Original geschrieben von combie
          Habe ich "schauen" oder "benutzen" gesagt?
          Okay, hast gewonnen . Ich habe mir das Kapitel zu der Klasse zend_acl mal durchgelesen und mir auch die dazugehörenden Dateien mal angeschaut, aber ich verstehe nur Bahnhof . Ich kann irgendwie keine Verbindung zu meiner Forumsberechtigungen herstellen...

          Kommentar


          • #6
            Nagut, dann etwas Ausführlicher..
            aber ohne auf Einzelheiten ein zugehen..

            Du bist nicht der Erste mit einem solchen Probleme.

            Und da du in einem Forum Fragen dazu stellst, vermute ich mal, dass deine selbstgebastelte Lösung nicht unbedingt sofort besser besser als eine fertige Lösungen wird.

            Schau dir ab, wie es Andere gelöst und eingesetzt haben.

            1. Für dich würde wohl ein User+Gruppen Konzept erstmal reichen. Schau dir an wie Linux das macht. Nachbauen!

            2. ACLs sind deutlich komplexer und universeller, feiner einstellbar. Da kannst du dir, in etwa, bei Windows was abschauen.
            Wir werden alle sterben

            Kommentar


            • #7
              Die Access Control Lists sind sehr sinnvoll, damit kann man eigentlich alles sehr flexible realisieren. Die Implementation von Zend ist afaik nicht so toll (langsam und sehr aufwändig), die Dokumentation und das Konzept ist aber ganz gut. Prinzipiell ist das ganze in drei Bereiche aufgeteilt: Rollen, eine Art Gruppe oder ein Benutzer, Ressourcen, das sind Module oder in deinem Fall zum Beispiel Foren / Threads und Aktionen (Hinzufügen, Bearbeiten, Löschen, usw.). Du kannst jede Kombination dieser drei erlauben oder verbieten. Je nach dem was du machst fragst du wieder eine Kombination ab. Ich hab die Dokumentation meiner Implementation mal angehängt wenn dich das interessiert.
              Angehängte Dateien
              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

              Kommentar


              • #8
                Das ist ja sehr nett von dir @tontechniker, aber ich will doch eifnach nur das selbst möglichst elegant realiseren. Da das Board vor allem aus der Idee entstanden ist meine Fähigkeitne in PHP und MySQL zu verbessern, will ich da wenn möglich alles selbst schreiben (oder in einem Forum mit erfahrenen Usern eine Lösung erarbeiten ). Damit ich auch bei jeder Codezeile weiss, was das Script macht.

                Deshalb wäre ich schon mit einer detailiertert Vorgehensweise die auf meine Situation zutrifft vollkommen zufrieden .
                Zuletzt geändert von pascal007; 14.10.2007, 15:26.

                Kommentar


                • #9
                  Zwei übliche und weitverbreitete Konzepte wurden dir vorgeschlagen. Jetzt ist es an dir weitere zu suchen, oder diich für eine der beiden zu entscheiden. Danach Implementieren.
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    Ich hab in meinem CMS die Benutzerverwaltung wie folgt gelöst:

                    1) Du arbeitest von Grund auf mit Benutzergruppen. Jeder Besucher wird automatisch einer Benutzergruppe zugeordnet, auch wenn er nur Gast ist. Dann erstellst Du z.B. folgende Gruppen:
                    1 Gast
                    2 Standard Benutzer
                    3 Premium Benutzer
                    98 Moderator
                    99 Administrator

                    2) Du ordnest nun den Besuchern die Benutzergruppen zu. Jeder Besucher, der nicht eingeloggt ist, bekommt automatisch die Benutzergruppe 1. Jeder Besucher der sich einloggt bekommt automatisch die Benutzergruppe 2. Premium Benutzer (wenn Du denn welche hast) bekommen die Benutzergruppe 3. Moderatoren 98, Administratoren 99.

                    3) Du Speicherst alle Benutzergruppen die einem Benutzer zugeordnet sind in ein Array.

                    4) Du schreibst deine Funktion, und überlegst Dir, welche Benutzergruppen diese aufrufen dürfen. Daraus ergibt sich dann folgender Code:

                    PHP-Code:
                    $userrank = array(...); // Array mit den Benutzergruppen

                    function foo() {
                        ... 
                    // Meine Funktion
                    }

                    /*
                    Überprüft, ob die angegebenen Benutzerränge 3, 97 bzw. 99 in
                    $userrank gespeichert sind. Ich habe mich hier für array_intersect
                    entschieden, um zwei Arrays zu vergleichen. Damit ist es egal ob
                    dem Benutzer die Benutzergruppe 3, 97 oder 99 zugeordnet ist.
                    Sobald eine Übereinstimmung gefunden ist, wird die Funktion
                    aufgerufen.
                    */
                    if(count(array_intersect($userrank, array(3,97,99))) > 0) {
                        
                    foo();

                    Für weitere Funktionen kannst Du Dir dann natürlich weitere Benutzergruppen zulegen.
                    Zuletzt geändert von PHPler; 15.10.2007, 22:57.

                    Kommentar


                    • #11
                      solche Antworten meinte ich . Vielen Dank ! Werde mal mein Glück mit deiner Idee und dem Code dazu versuchen .

                      Eines ist mir noch ein klein wenig unklar: wenn ich jetzt z.B. bei

                      PHP-Code:
                      ... $userrank, array(3)) ... 
                      nur die 3 im Array drinnstehen habe, und es kommt ein Admin (99) ist dann die Abfrage auch wahr? Also kann dann jede Zahl die grösser als 3 ist die Funktion foo() aufrufen?
                      Zuletzt geändert von pascal007; 15.10.2007, 10:55.

                      Kommentar


                      • #12
                        Nein, es geht nicht darum, dass jeder dessen Zahl größer ist als 3 automatisch Zugriff hat. Wenn Du z.B. einen User hast mit dem Rank 2 (Standard User) und 99 (Administrator), also:

                        PHP-Code:
                        $userrank = array(2,99); 
                        Und Du machst dann den hier:

                        PHP-Code:
                        if(count(array_intersect($userrank, array(3))) > 0
                        Die ganze Abfrage überprüft, ob 3 in $userrank gespeichert ist. Da im Userrank nur 2, und 99 gespeichert ist, ist die Abfrage also falsch, und der Benutzer kann die Funktion nicht aufrufen, obwohl er Administrator ist. Erst wenn Du dem Benutzer die Benutzergruppe 3 zuweist, also:

                        PHP-Code:
                        $userrank = array(2,3,99); 
                        ergibt die Abfrage ein Wahr, und der Benutzer kann die Funktion aufrufen. Für Administratoren kannst Du Dir den Aufruf auch folgendermaßen anpassen:

                        PHP-Code:
                        if(in_array(99$userrank) OR count(array_intersect($userrank, array(3))) > 0
                        Damit kann der Administrator in jedem Fall die Funktion aufrufen.

                        Somit kannst Du für alles eigene Rechte setzen und das ganze dann über die Benutzergruppen steuern. Hast Du (aus welchen Gründen auch immer) viele Benutzergruppen, kannst Du Dir im übrigen auch eine Umkehrfunktion dazu basteln, so dass du auch einzelne Benutzergruppen ausschließen kannst.

                        Kommentar


                        • #13
                          Kannst du deinen blöden Kommentar im Quelltext bitte umbrechen? Macht voll kein Spa0, diesen Thread zu lesen!!

                          Kommentar


                          • #14
                            Okay, jetzt is mir das klar.

                            Hast du auch noch einen Tipp, wie ich am besten dieses Array des Users beim einloggen zusammenbaue? Also dass wenn er Admin ist, alle Typen (3,2,1,99, usw.) in dem Array stehen?
                            Wie hast du das gemacht gelöst?

                            Kommentar


                            • #15
                              Schreib den Wert in die Datenbank und kombiniere in_array und array_slice. Und brich deinen Code um!
                              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                              Kommentar

                              Lädt...
                              X