Hallo miteinander,
Ich bin aktuell bei der Implementierung eines brauchbaren möglichst generischen Rechtesystems. Und stoße hier noch auf Designprobleme.
Die rollengebunden Rechte bereiten mir dabei keine Probleme, damit fange ich dann u.a. ab wenn Nutzer beispielsweise ohne "Admin"-Rolle auf entsprechende Routen zugreifen wollen.
Allerdings habe ich zusätzlich oft noch "Individualrechte" nach dem Motto "Jeder Nutzer darf seine eigene Profilseite ändern", "Jeder Nutzer darf das Profil all seiner Freunde aufrufen".
Hier Ende ich bei meinen Konzepten immer bei 2 Extremen. Entweder ich hole mir Code ins Haus der von impliziten Konventionen abhängt. D.h. ich definiere mir diese zusätzlichen Rechte und schreibe sie zu den Routes dazu, wenn dort dann also "only_friend" oder "only_own" auftaucht wird für die jeweilige angefragte Route in der Datenbank nach der dazu eingetragenen account_id geguckt.
Dafür müsste aber nun die angefragte Route immer ein entsprechendes Gegenstück als Datenbanktabelle haben und zusätzlich muss dort die Spalte account_id als "Besitzerspalte" auftauchen.
Meine Alternative dazu wird dann immer sehr umfangreich. Ich erstelle mir zu jedem Controller noch ein Authenticate Gegenstück und habe dort für jede mögliche Aktion eine Methode hinterlegt, welche true oder false zurückgibt. In den Methoden kann ich dann komplett nach Bedarf prüfen.
Oder ist es vielleicht sogar sinnvoller diese "individuelle" Prüfung nach Ausführung der Route im Controller zu machen? Das scheint mir von der Komplexität ein "Mittelding" zu werden, andererseits fühle ich mich nicht ganz wohl die Authentifizierung erst im Controller durchzuführen, den Ansatz "Wer nicht authentifiziert ist, kommt garnicht über das Routing hinaus" finde ich da tendenziell schöner.
Wie sehen da eure Ansätze aus? Gibts vielleicht eine "Lieblingsbibliothek" die ihr für Authentifizierung einbindet?
Liebe Grüße
Ich bin aktuell bei der Implementierung eines brauchbaren möglichst generischen Rechtesystems. Und stoße hier noch auf Designprobleme.
Die rollengebunden Rechte bereiten mir dabei keine Probleme, damit fange ich dann u.a. ab wenn Nutzer beispielsweise ohne "Admin"-Rolle auf entsprechende Routen zugreifen wollen.
Allerdings habe ich zusätzlich oft noch "Individualrechte" nach dem Motto "Jeder Nutzer darf seine eigene Profilseite ändern", "Jeder Nutzer darf das Profil all seiner Freunde aufrufen".
Hier Ende ich bei meinen Konzepten immer bei 2 Extremen. Entweder ich hole mir Code ins Haus der von impliziten Konventionen abhängt. D.h. ich definiere mir diese zusätzlichen Rechte und schreibe sie zu den Routes dazu, wenn dort dann also "only_friend" oder "only_own" auftaucht wird für die jeweilige angefragte Route in der Datenbank nach der dazu eingetragenen account_id geguckt.
Dafür müsste aber nun die angefragte Route immer ein entsprechendes Gegenstück als Datenbanktabelle haben und zusätzlich muss dort die Spalte account_id als "Besitzerspalte" auftauchen.
Meine Alternative dazu wird dann immer sehr umfangreich. Ich erstelle mir zu jedem Controller noch ein Authenticate Gegenstück und habe dort für jede mögliche Aktion eine Methode hinterlegt, welche true oder false zurückgibt. In den Methoden kann ich dann komplett nach Bedarf prüfen.
Oder ist es vielleicht sogar sinnvoller diese "individuelle" Prüfung nach Ausführung der Route im Controller zu machen? Das scheint mir von der Komplexität ein "Mittelding" zu werden, andererseits fühle ich mich nicht ganz wohl die Authentifizierung erst im Controller durchzuführen, den Ansatz "Wer nicht authentifiziert ist, kommt garnicht über das Routing hinaus" finde ich da tendenziell schöner.
Wie sehen da eure Ansätze aus? Gibts vielleicht eine "Lieblingsbibliothek" die ihr für Authentifizierung einbindet?
Liebe Grüße
Kommentar