Ankündigung

Einklappen
Keine Ankündigung bisher.

Berechtigungen in Userverwaltung???

Einklappen

Neue Werbung 2019

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

  • Berechtigungen in Userverwaltung???

    Hi.
    Vielleicht kann mir jemand helfen?
    Ich würde gerne eine Benutzerverwaltung mit unterschiedlichen Berechtigung auf diverse Bereiche meiner page basteln. Die UServerwaltung ist kein Problem - aber ich hab keine Idee wie ich die Sache mit den Berechtigungen angehen soll, also der Besucher darf oder darf nicht, oder darf nur lesen oder auch schreiben oder bestimmte Formulare aufrufen etc...
    thx schon mal...

  • #2
    Setze in der Seite eine Sessionvariable , z.B. $_SESSION['ebene'] = 5;

    und in der User-DB eine Spalte Ebene INT 9

    und schon kann in einer Seite der Ebene 5 nur ein User mit "Sicherheitsstufe" 5 (oder höher, wenn du das so machst)

    editieren

    if ($_SESSION['userebene'] < $_SESSION['ebene']) exit;

    kommt das in die Richtung?

    Kommentar


    • #3
      Re: Berechtigungen in Userverwaltung???

      Zitat von Canni
      Ich würde gerne eine Benutzerverwaltung mit unterschiedlichen Berechtigung auf diverse Bereiche meiner page basteln. Die UServerwaltung ist kein Problem - aber ich hab keine Idee wie ich die Sache mit den Berechtigungen angehen soll
      Das ist keine Frage, die man pauschal beantworten könnte und in der es Sinn machen würde, dir Vorschläge zur Implementierung zu machen. Setz dich erstmal hin und krieg klar, was genau deine Anforderungen sind.

      Reicht ein einfaches "Stufenkonzept", wie von "Catweazle" vorgeschlagen, oder lassen sich die Berechtigungen nicht so einfach strukturieren?

      Was für Objekte und Aktionen gibt es, die einer Berechtigung bedürfen? Einzelne Seiten? Seitentypen? Site-Bereiche? Seiten-Elemente? Geht es nur um die Standard-Seiten-Operationen (anzeigen, anlegen, bearbeiten (Inhalte, verschieben, umbenennen, Rechte vergeben), löschen) bzw. reicht es z.B., die Objekte mit Schreib- und Leserechten auszustatten?

      Wer besitzt Rechte? Benutzer, Gruppen oder vielleicht eher Rollen? Oder Rollen in bestimmten Gruppen?

      Die Oerationen kannst du ja einfach mal aus dem Pflichtenheft rauskopieren und dahinterschreiben, wer diese ausführen darf. Zum Beispel:

      Seite löschen:
      Nur Besitzer der Seite, Redateure im zugeordeten Bereich und Admins

      Neue Seite anlegen:
      - Seitentypen:
      -- News-Seite: nur Admins
      -- Artikel: Autoren, aber nur in ihrem Bereich

      etc.

      Den Part kann die niemand abnehmen.

      Bei dem konkreten Vorschlag mit der Speicherung in der Session ist zu bedenken, dass du so einem eingeloggten Benutzer seine Rechte nicht während seiner Sitzung entziehen kannst. Und das INT 9 ist natürlich Käse aber auch Wurscht.

      Basti

      Kommentar


      • #4
        Thx erst mal für die schnellen beiträge und für die Denkanstöße .

        Ich hatte mir das so vorgestellt, daß ich meine Page in verschiedene Service bzw. Infobereiche ( z.B. News, GB etc., eventuell mal um ein kleines Forum erweitern.. ) einteilen möchte und nicht für jeden bereich eine eigene Benutzerverwaltung machen muß, sondern eine in der die Berechtigung auf die einzelnen Bereiche für den User stehen. Also ungefähr

        user | bereich1 | bereich2 | bereich3
        xyz | lesen | r/w | nüschts
        admin | r/w | r/w | r/w
        zyx | nüscht | lesen | lesen

        Gruppen oder rollen wollte ich nicht benutzen. Ich denke es läuft auf ein Berechtigungskonzept wie in einem Forum zunächst ohne Rollen oder Gruppen hinaus. Da ich im Mom noch nicht genau weiß, ob und wann ich dazu komme all das zu machen was ich vor habe wäre es gut wenn das Berechtigungskonzept erweiterbar ist.
        Gruß
        Canni

        Kommentar


        • #5
          Hi Canni.

          Wenn das so machen willst, dann leg die Beriche jedoch nicht als Spalten einer DB-Tabelle an, sonden arbeite mit einer Zuordunstabelle:

          sections:
          guestbook, bla
          news, blubb

          rights:
          paul, guestbook, write
          gerda, news, write
          paul, news, write
          hans, guestbook, read

          Das Ding ist halt, dass sich bei sowas in der Regel eben schnell herausstellt, dass Gruppen von Benutzern gleiche Rechte haben und dann macht es eben Sinn, eine Tabelle zu erstellen, in der du einen Benutzer 1-n Gruppen zuordnen kannst und eine, in der du jeder Gruppe verschiedene Rechte zuweisen kannst. So kannst du später z.B. für einen neuen Bereich einfach definieren, dass alle Moderatoren (die, die bisher fremde Gästebuch-Einträge bearbeiten durften) dann auch im Forum fremde Beiträge editieren dürfen etc.

          Basti

          PS:
          Page heißt Seite, Seite aber nicht Site. Du meinst deine Website (ohne e), sprichst aber von Page.

          Kommentar


          • #6
            Hi Basti.
            Page => kurzform von Homepage ( allgemeiner Sprachgebrauch für Website ) => Site => natürlich .

            Mir ist noch nicht ganz klar wie ich

            sections:
            guestbook, bla
            news, blubb

            rights:
            paul, guestbook, write
            gerda, news, write
            paul, news, write
            hans, guestbook, read

            Datenbankmäßig umsetzten kann / soll.
            Eine Tabelle Gruppen
            Eine Tabelle User => soweit^^
            dann:
            eine Tabelle rights und eine Tabelle sections ( die Zuordnungstabelle sollte ja auch eine DB Tabelle sein )?

            Wie sieht es denn mit dem folgenden Ansatz aus:
            Tabelle rechte
            recht;Maske
            lesen; 00000001
            schreiben;00000010
            ändern; 00000100
            Tabelle user
            user;section1;section2;section2
            Paul;00000001 (lesen);00000011(lesen+schreiben);00000111(lesen schreiben und ändern)

            00000101 dürfte dann z.b. zwar lesen und ändern aber selbst nicht verfassen
            00000010 dürfte nichts ändern und nicht lesen ( z.b. beiträge von anderen )

            Kommentar


            • #7
              Hi.

              Mir ist noch nicht ganz klar wie ich

              sections:
              guestbook, bla
              news, blubb

              rights:
              paul, guestbook, write
              gerda, news, write
              paul, news, write
              hans, guestbook, read

              Datenbankmäßig umsetzten kann / soll.
              Ich meinte das eigentlich so, wie oben geschrieben:
              Eine Tabelle "sections" mit der ID des Bereiches (und sonstigen Atrributen) und eine Tahelle "rights" mit den Feldern "id" (auto increment), "user", "section", "permission" oder so. Damit kannst du die Rechte für jeden Benutzer auf jeden Bereich abbilden. Kein Eintrag hieße z.B. keine Rechte des Benutzers an dem Bereich.

              Wie sieht es denn mit dem folgenden Ansatz aus:
              Tabelle rechte
              recht;Maske
              lesen; 00000001
              schreiben;00000010
              ändern; 00000100
              Tabelle user
              user;section1;section2;section2
              Paul;00000001 (lesen);00000011(lesen+schreiben);00000111(lesen schreiben und ändern)

              00000101 dürfte dann z.b. zwar lesen und ändern aber selbst nicht verfassen
              00000010 dürfte nichts ändern und nicht lesen ( z.b. beiträge von anderen )
              Die Frage ist, ob du alle Rechte derart vereinheitlichen kannst. Wenn lesen, schreiben und ändern in allen Bereichen ausreicht, dann passt das ja. Wenn aber in einem Bereich vielleicht noch verschieben, kommentieren, veröffentlichen etc. dazukommen, dann musst du dafür dann entweder einen eigenen Bereich anlegen (Kommentare lesen/schreiben/ändern) oder ein Bit hinzufügen, das für andere Bereiche dann wieder uninteressant sein könnte.

              Wenn das für dich o hinhaut, dann leg die Werte jedoch als Integer in die Datenbank und mach die Überprüfung in PHP auf der Bit-Ebene. Zum Beispiel:

              PHP-Code:

              // Konstanten zur einfachen Handhabung:

              define('PERM_READ'<< 0);
              define('PERM_WRITE'<< 1);
              define('PERM_EDIT'<< 2);

              // Klasse User:

              public function hasPerm($sSection$cOperation)
              {
                  
              $iPerm $this->getRight($sSection);
                  return 
              $iPerm $cOperation;
              }

              protected function 
              getRight($sSection)
              {
                  if (!isset(
              $this->aRights[$sSection]))
                      return 
              0;

                  return 
              $this->aRights[$sSection];
              }

              // Benutzung:

              if ($this->User->hasPerm('section_a'PERM_WRITE)
                  
              $this->soSomething();

              // sontige Operationen:

              // Schreibrechte loeschen:
              $this->aRights[$sSection] &=  ~PERM_WRITE;

              // Editierrechte hinzufuegen:
              $this->aRights[$sSection] |= PERM_EDIT
              ...oder so in der Art halt.

              Was, wie gesagt ungünstig ist, ist, die Sektionan als Tabellespalten zu definieren, da du für Änderungen in dem Punkt dein DB-Layout verändern musst und das mitunter ziemlich ätzend werden kann (z.B. bei Backups etc.).

              Also tatsächlich lieber diese Zuordnungstabelle mit user, section, permission schreiben. Das ist auch der übliche Weg, eine n:m- bzw. nc:mc-Bezehung abzubilden (ein Benutzer kann (c) einer oder mehreren (n) Bereichen zugeordnet sein, ein Bereich kann (c) einem oder mehreren (m) Benuzern zugrodnet sein - mit den jeweiligen Rechten).

              [OT]
              Zitat von Canni
              Page => kurzform von Homepage ( allgemeiner Sprachgebrauch für Website )
              Wenn man in dem Beraich arbeitet, macht es Sinn, die Begriffe richtig zu gebrauchen, auch wenn diese von Laien und Kunden oft anders gebraucht werden. Die Homepage ist nunmal die Startseite einer Website, auch wenn im deutschsprachigen Raum es eben diesen fase friend (Seite - Site) gibt und daher eben Page mitunter synomym mit Site benutzt wird.

              Warum macht es Sinn? Unter Kollegen kann man Missverständnisse vermeiden; im internationalen Austausch, sowie in Präsentationen vor mitunter kundigem Publikum ("Willkommen auf der Homepage unseres Verbandes") vermeidet man Unverständnis bzw. Geringschätzung und man trägt nicht dazu bei, diesen Übersetzungsfehler weiter zu verbreiten.
              [EOT]

              Basti

              Kommentar


              • #8
                Wenn man in dem Beraich arbeitet, macht es Sinn, die Begriffe richtig zu gebrauchen, auch wenn diese von Laien und Kunden oft anders gebraucht werden. Die Homepage ist nunmal die Startseite einer Website, auch wenn im deutschsprachigen Raum es eben diesen fase friend (Seite - Site) gibt und daher eben Page mitunter synomym mit Site benutzt wird.

                Warum macht es Sinn? Unter Kollegen kann man Missverständnisse vermeiden; im internationalen Austausch, sowie in Präsentationen vor mitunter kundigem Publikum ("Willkommen auf der Homepage unseres Verbandes") vermeidet man Unverständnis bzw. Geringschätzung und man trägt nicht dazu bei, diesen Übersetzungsfehler weiter zu verbreiten.
                Jepp. Da geb ich dir allerdings recht. Man ordnet sich schnell dem allgemeinen Sprachgebrauch unter. Muß mal mehr darauf achten ( schließlich weiß ich´s ja ).
                Und danke nochmal für die Hilfe und Anregungen. Ich muß das jetzt erst mal setzen lassen und abwägen wie ich weitermache
                Schönes WE, Canni

                Kommentar


                • #9
                  Ich habe für die Rechteverwaltung der User eine Key Tabelle angelegt, in der beschrieben ist, was möglich ist, z.B. edit,new,delete .
                  Jeder User und Benutzergruppe kann mit meheren Keys ausgestattet sein.

                  Kommentar


                  • #10
                    Auch einen Blick wert ist phpGACL[1]. Das Handbuch[2] ist auch gleich eine ganz gute Einführung in das Thema.

                    Basti

                    [1] http://phpgacl.sourceforge.net/
                    [2] http://phpgacl.sourceforge.net/manual.pdf

                    Kommentar


                    • #11
                      Ich hab mir jetzt mal das WE Gedanken gemacht und werde es mal so probieren:

                      Tabelle user:
                      -uid
                      -nick
                      -mail
                      -sessionid
                      -etc

                      Tabelle (Berechtigungs)level:
                      -levelid
                      -level ( schreiben, lesen etc )
                      -beschreibung

                      Tabelle scope:
                      -scopeid
                      -scope ( z.B. Linktabelle )
                      -bechreibung

                      Tabelle user_perms:
                      -pid
                      -uid
                      -scopeid
                      -levelid

                      aus user perms müßten sich die aktuellen Berechtigung aufgrund der Zuweisungen der ID´s lesen lassen. Ich hab dann einen User ( uid ) der einen bestimmten Bereich ( scopeid ) nutzen will und dafür in user_perms die Berechtigung zugewiesen bekommt ( levelid ). So kann ich auch dynamisch die levels ändern wenn nötig und der User kann für verschiedene Bereiche verschiedene Rechte bekommen. Denkfehler in dem Ansatz oder ist das so ok?
                      Gruß
                      Canni

                      Kommentar


                      • #12
                        Hi.

                        Eine Alternatve bzw. Erweiterung wäre, anstatt der einzelnen Level für bestimmte Typen angefragter Objekte (z.B. Linktabelle) je eine Matrix anzulegen, in der du z.B. in 8 Spalten bis zu 8 verschiedene Aktionen definieren kannst, die dann je einem Bit entsprechen.

                        Also anstatt einer Level-ID eben eine Liste mit den Aktionen (1: Lesen, 2: Schreiben etc.) und in der user_perms steht dann eben die jeweilige Maske. Wenn der Benutzer nur lesen darf, also z.B. eine 1 (für binär 00000001), wenn er lesen und schreiben darf eine 3 (00000011) etc.

                        Basti

                        Kommentar

                        Lädt...
                        X