Auswertung von 3 dimensionalen "Array" in PHP

  • Hallo Forum Member,

    ich versuche mich etwas an PHP Programmierung und stehe vor einen Problem wo ich nicht recht weis wie ich es loesen soll.
    Vielleicht hat jemand einen Tip (bitte keine fertige Solution, nur einen Anhaltspunkt) damit ich weiter komme. Habe diesbezueglich einfach eine Blockade.

    1. Ich habe in einer Datenbank Zugriffs Rollen vergeben ... realtiv easy, mit den Feldern (id) , Username, Guest, Registered, Advanced, Moderator, Admin
    Die Gruppen sind hier einfach nur mit 0 und 1 belegt. ID ist auto_increment. Mir schwebt es auch vor dies wie folgt zu aendern.
    (id), Username, Role ... wobei die Gruppe je nachdem 0 = Guest, 2 = Registered, 4 = Advanced, 8 = Moderator und 16 = Admin enthaellt.
    Das Prinzip ist aber aehnlich ist aber glaub ich einfacher zu handeln. Was ist hier eleganter ?

    2. Weiteres vorauszuschicken ... es gibt verschiedene Status eines Blog Eintrages ... New, Review, Submitted, Sticked, Hiden und Deleted

    3. und zuletzt gibt es noch durchzufuehrende Funktionen die auf die in Punkt 2 erwaehnten Status Bezug nehmen ...

    Nun kommt der "Plan" ... oder eben kein Plan den ich derzeit habe :(
    Jeder User darf anhand der vergebenen Role zum Zeitpunkt eines bestimmten Block Status nur eine bestimmte Funktion durchfuehren.

    Ein paar Beipiele:

    Guest darf nur lesen.

    Registered User darf einen Block Eintrag speichern, damit bekommt er Status New.
    Registered darf im Status New nur zu Status Review aendern

    Advanced darf vom Status Review in Submitted aendern
    Moderator darf das auch, darf aber zusaetzlich noch verstecken.
    Ist der Block Eintrag Submitted darf er vom Moderator auch wueder zurueck in den Status Review geschickt werden.
    Nur der Admin darf Deleten.

    Es sollen nur die Funktionen angezeigt werden die von einer bestimmten Role in einen bestimmten Block Status auch durchgefuehrt werden duerfen.
    Ich habs mal mit endlosen verschachtelten IF Schleifen realisiert, sieht sehr unuebersichtlich und fehlertraechtig aus.

    Deshalb die Frage an die Wissenden der PHP programmier Technik.
    Wie wuerded Ihr es loesen ? Wo ist mein gedanklicher Fehltritt ?

    Ich bendanke mich bereits im Voraus fuer jede konstruktive Anregung.
    Gruss, Sandroino

  • Das ist schon eine recht umfangreiche Rechteverwaltung.
    Ich würde das ähnlich den Rechten unter Unixen lösen und die Rechte errechnen, indem ich die Kennzahlen addiere.

    0 = Guest,
    2 = Registered,
    4 = Advanced,
    8 = Moderator und
    16 = Admin

    0+2+4 = 6 => Advanced
    0+2+4+8 = 16 => Mod


    Das lässt sich leicht in einer Funktion ( z.B. function get_user_rights($userid) ) unterbringen.
    So kann man schön prüfen, z.B. Rechte >= 2 darf A,B, Rechte >=6 darf A,B,C,D, Rechte >=32 darf alles u.s.w.

    In den Funktionen die du erlauben möchtest, brauchts du dann nur noch testen, ob die Rechte grösser einem Wert sind, also z.B.

    2 Mal editiert, zuletzt von sysop (23. Dezember 2014 um 11:20)