Repository Muster und Layering. Wo verwende ich Sicherheit?

9

Ich tue mein Bestes, um meine Web-App mit einer guten Trennung zwischen den Layern zu gestalten. Ich verwende das Repository-Muster und habe als solches ein SQLObjectRepository, das von meinem ObjectService aufgerufen wird, der von meinem Web-Frontend aufgerufen wird.

In meinem Objektmodell ist der Benutzer einer oder mehreren Regionen zugeordnet, die die Objekte filtern sollten, auf die sie Zugriff haben sollen. Meine Frage ist, wenn ich Objekte abfrage, setze ich den Code in den Service, um die Berechtigungen für die Objekte zu setzen, oder sollte dieser Code im Repository sein? Wenn der Benutzer Mitglied in 2 Regionen ist, sollte ich den Benutzer als Parameter an den Dienst übergeben oder sollte ich die Regionen des Benutzers an den Dienst übergeben?

    
Devon 09.12.2008, 18:49
quelle

1 Antwort

3

Ich würde:

  • Schreiben Sie die Sicherheitsüberprüfung so, dass sie an jedem beliebigen Ort angewendet werden kann. Auf diese Weise können Sie bei veränderten Anforderungen umgestalten.

  • Wenn die Sicherheitsüberprüfung wirklich immer gilt, fügen Sie sie in die Repository-Ebene ein (oder besser, wenn Ihre Sprache dies unterstützt), damit mehrere Dienste dieselbe Sicherheit haben wenn sie dasselbe Repository verwenden. Andernfalls legen Sie es in den Dienst (oder einen Aspekt, der auf den Dienst wirkt).

  • übergibt das gesamte Benutzerobjekt an den Sicherheitsüberprüfungsmechanismus:

    • Wenn die Sicherheitsprüfung zu einem späteren Zeitpunkt komplexer wird (abhängig von anderen Eigenschaften des Benutzers), ändert sich die API nicht;
    • Es macht mehr semantischen Sinn - Sie überprüfen, der Benutzer hat die Erlaubnis, etwas zu tun, nicht, dass eine Liste von Ländern tut.
Dan Vinton 09.12.2008, 21:56
quelle