[PHP] Workflow - Rechtesystem

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

  • [PHP] Workflow - Rechtesystem

    Guten Abend euch allen,


    ich habe mir ein mini-cms geschrieben, welches auf einer Seite in Betrieb genommen werden soll. Dabei geht es um eine Schul-Seite, auf der 5 verschiedene Benutzerarten existieren.
    • Administrator (Alle Rechte)
    • Stellvertretender Administrator (Fast Alle Rechte [darf])
    • Lehrkraft (bestimmte Texte verfassen [freischaltung durch Admin erforderlich])
    • Schüler (z.B. Schülervertreter) [Editieren des SV - Bereiches (gegenlesen und freischalten erforderlich)]
    • Schüler (Nur Leserechte)


    So ungefähr sollte das aussehen. Die Tabelle für die Texte ist schon designed, und hat folgenden Aufbau:

    id (sollte klar sein)
    sub_id (Kategorien ID)
    title (Seitentitel)
    content (Inhalt)
    cctime (Letzte Bearbeitung am...)
    autor_id (Die ID des Autoren)
    last_edit_by (Die letzte Änderung durch welchen Autor)
    typ (Texttyp... Hängt mit Kategorien zusammen)
    gallery_id (Id für zugehörige Gallerie)
    visible (Ist Seite sichtbar?)
    active (Ist Seite überhaupt aktiviert?)
    perms (Rechte)

    Die Benutzertabelle sieht so aus:

    id (sollte klar sein)
    username (Benutzername)
    password (Passwort)
    name (Nachname)
    p_name (Vorname)
    street (Straße)
    plz (Postleitzahl)
    land (Land)
    phone (Telefon)
    fax (Fax)
    mobil (Handy)
    email (Email)
    active (Aktivierter User?)
    has_mail (Internes Message System)
    last_visit (Letzer Besuch am:...)
    perms (Benutzerrechte)

    Nun bin ich am überlegen, wie ich die Rechteverteilung handhaben soll.
    Um ehrlich zu sein, habe ich mir schon x-mal den Kopf zerbrochen, komme aber auf keine Idee...

    Das blöde daran ist ja, dass verschiedene Benutzer so viele verschiedene Rechte haben wie es Texte gibt... Und die Texte auf der Seite sind unendlich erweiterbar...


    Hat hier jemand vielleicht eine Idee für mich?



    Viele Grüße

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

  • #2
    Wie wäre es denn die Texte mit "Rechten zu versehen"?

    Wenn der Text von einem Schüler erstellt wurde erhält er das Level 10 z.B.

    Somit kann jeder Schüler den Text editieren, und alles die über dem Schüler stehen.

    Wenn ein Lehrer den Text erstellt hat, jeder der über dem Lehrer steht.

    Zusätzlich kannst du noch ein Special Recht anfügen. Du Special Rechte kann dann eine Kommaseparierter String aus UserIDs sein.

    Beispiel:

    10,20,45,121,456,334,1

    Somit hätten die User mit der ID 10, 20, 45, 121, 456, 334 und 1 die Rechte den Text zu bearbeiten + die Stufe die beim erstellen angelegt wurde.

    Kommentar


    • #3
      Wenn man "Spezialrecht" durch Gruppenrecht und "kommaseparierter String" durch Gruppe, hat man die Abstraktion wie man sie z.B. von Unix kennt.

      Dazu brauchts dann zwar eine weitere Tabelle (groups), aber dafür findet man fertige DB-Schemata und Scripte im Netz.

      Kommentar


      • #4
        Nunja, nur ist das in dem Fall nicht so einfach... Habe es mal als Screenshot eingebettet... Es ist nämlich noch so, dass die Rechte unabhängig von Kategorien sind. Also fallen Gruppenrechte aus...

        Wärend nämlich z.B. Schüler 1 in Kategorie "Schule" NUR Beiträge editieren darf (und das wird auch nur nach Kontrolllesung freigeschaltet), darf Schüler 4 in Kategorie Schule und Termine auch neue Texte verfassen...
        Das ganze natürlich auch analog zu anderen Kategorien...
        Angehängte Dateien
        Die meiste Unwissenheit könnte besiegt werden. Wir eignen uns nur deshalb keine Kenntnisse an, weil wir sie nicht wünschen.

        Kommentar


        • #5
          Dann musst du halt für jeden Punkt so ein Rechtesystem bauen.

          Für den Punkt Anmeldungen für Kurse.

          Schreibrechte hat User: 4,5,12,......

          Löschrechte hat User: 23,45,25,.....

          Editierrechte hat User: .........

          Kommentar


          • #6
            ... oder Gruppen anlegen:

            Schreibgruppe: User 4,5,12,......

            Löschgruppe: User 23,45,25,.....

            Editiergruppe:User .........


            Ich glaube nämlich schon, daß es "so einfach" ist, schließlich hat es sich in vielen Betriebssystemen bewährt und was du wills läßt sich darauf abbilden.

            Außerdem werden es dir die User/Admins danken, weil sie etwas bekanntes Vorfinden und sich nicht mit irgendwelchen Listen rumschlagen müssen.
            Zuletzt geändert von onemorenerd; 01.07.2005, 00:11.

            Kommentar


            • #7
              Hi nochmal,


              ich habe mich nun für folgenden Lösungsansatz entschieden:

              Die Tabelle mit den Logindaten enthält ja auch eine Spalte mit den Rechten.
              Ich speicher nun mittels serialize ein Array mit den Rechten.
              Beispiel für ein solches Array:

              array(
              [10] => "rwx"
              [12] => "rw-"
              [23] => "r--"
              )

              Die Schlüssel zeigen entsprechende Text-ID's....
              Die Werte bestehen aus 4 Elementen:
              r = read
              w= edit
              x= delete

              Ich lade die Rechte nach beim Login in die Session und habe die Daten immer parat.


              Viele Grüße

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

              Kommentar

              Lädt...
              X