Hallo,
ich bin neu hier und hoffe ihr könnte mir helfen.
Es handelt sich zwar um ZF2 aber das sollte nicht von Belang sein für mein Problem. (im ZF2 Forum gibt es diese Kategorie nicht)

Ich will für ein größeres Projekt die ACL schreiben. Dabei sollen die Rollen nie global sein, sondern immer Context bezogen,
das heißt irgendein User kann auf einer bestimmten Seite alle Rechte eines Admins haben, doch auf der nächsten wieder
nur die eines Users.
Hier mal folgendes EER was ich gerade aus dem Gedächtnis erstellt habe, hoffe es hat sich kein Fehler eingeschlichen.

eer.jpg

Meine gedachte Abfolge.
1. Dem User wird durch die UserId und dem Context (durch die ContextID) eine gewisse Rolle gegeben (in den dependencies). Wichtig ist das der Context
aus dem Modul und dem Controller besteht. Jeder Context mit einer Id wird durch die refId in dependencies eindeutig zugeordnet.
2. Die Rolle (role) ist mit dem Rechten (permission) über eine Tabelle miteinander verknüpft.
3. Die Rechte sind eindeutig zugewiesen indem das Recht (action) mit dem Context verknüpft ist.
3.a. Diese Verknüpfung (roter Kreis) könnte man wegfallen lassen indem man jedes Recht (action) eineindeutig benennt.

Beispiel.:
User A will auf /profile(module)/editor(controller)/delete(action)/1213(id) zugreifen. Zuerst wird über /profile/editor die ContextId (in context) ermittelt. Durch die UserId von User A , die ContextId und die Id:'1213' wird eine bestimmte Rolle (für User A) zugeordnet. Falls diese Zuordnung nicht existiert, hat der User A logischerweise kein Recht darauf. Danach wird geschaut ob die Rolle von User A auch das Recht hat die delete-Action aufzurufen. Ist dieses Recht ('delete' da die Action 'delete' heißt) auf dem Context der Rolle zugewiesen, darf er es. Wenn nicht dann nicht.

Puh das ist sehr schwer zu erklären. Hoffe man versteht was ich sagen will.

So jetzt brauche ich eure Meinung bzw euer Wissen.
Wie sieht es aus, wo hat diese Struktur ihre Schwächen? Wie kann man sie beheben? Mache ich es viel zu kompliziert, oder ist das ein guter Weg für solche eine Context-basierende ACL?
PS.: Falls jemand eine bessere Bezeichnung von "context" einfällt darf er sich gern melden.

mfg Hanibal