Moin!
Wenn ein User sich angemeldet hat, dann kennst du seine User-ID in der Session. Schreib seine Gruppen auch noch hinein, das vereinfach dir die Prüfung der Zugriffsrechte.
Dazu hätte ich noch eine Frage. Inwiefern vereinfacht mir das die Prüfung?
Weil du zur Gruppenzugehörigkeit des Users nicht immer wieder die DB befragen musst. Oder alternativ die Gruppenzugehörigkeit standardmäßig bei jedem Request sowieso aus der DB ausliest und deshalb verfügbar hast.
Die Session könnte doch immer potentiell manipuliert sein (Client->Server) also bleibt mir doch nichts übrig als "nur" zu prüfen ob Benutzer-ID und Session-ID bereits bekannt sind (sprich in der DB gespeichert).
Die Session-Info in $_SESSION kann nicht manipuliert sein. Wenn ein Angreifer in der Lage ist, die Session-ID einer aktiven Session zu raten, hast du verloren, egal was du machst, denn nur die Unratbarkeit dieser ID gewährleistet die Sicherheit.
In der Session stehen also Dinge über den zugehörigen Benutzer: Bis wann ist die Session gültig? Ist er angemeldet und als wer (User-ID)? Welchen Usergruppen gehört er an, also welche Rechte hat er?
Muss ich alles andere nicht sowieso abfragen?
Du kannst natürlich die Infos zu dem jeweiligen User bzw. den Gruppenrechten bei jedem Request abfragen. Das verhindert, dass sich ein User mal irgendwann einloggt, die Session unendlich lange aktiv hält, und du ihn administrativ nicht sperren kannst, weil das Ändern seiner Rechte in der DB nie erneut aus der DB gelesen wird, sondern immer noch der Zustand von "anno" in $_SESSION steht.
Ich würde nur vermeiden wollen, aus der DB anfangs wirklich nur den User auszulesen, und später über die Konstruktion von Gruppen, Modulen und Seiten auch noch einen JOIN hin zu den UserIDs ausführen zu müssen. Ich habe dafür keine harten Belege, aber meine gesammelten Erfahrungswerte sagen mir, dass man die Gruppenzugehörigkeit eines Users an viel mehr Stellen "direkt" brauchen kann, und dass deshalb diese Info direkt mit zum User gehört.
- Sven Rautenberg