Angenommen, ich besitze eine Datenbank mit Büchern und Benutzern, und diese Benutzer haben bestimmte Berechtigungen für Bücher (wie Bearbeiten, Löschen usw.). Jetzt würde ich Methoden wie die folgende schreiben und dies als eine API und WebService verfügbar machen.Wie sollte man Berechtigungen für Objekte in .NET verwenden?
[WebMethod]
Book GetBook(User login, int id) {
if (!CheckLogin(login))
throw new Exception("Login error");
return new Book(id);
}
Dies scheint alles in Ordnung, aber wie würde ich dieses Buch wieder speichern, wenn ich es geändert? Es fühlt sich richtig an, eine Save()
Methode auf das Book-Objekt zu legen, da es (das Objekt) für sich selbst sorgen sollte. Aber die Überprüfung der Berechtigungen fühlt sich nicht richtig an. (Ich möchte nicht, dass das Buchobjekt etwas über Benutzer weiß)
Sollte ich SaveBook(Book book)
wie Methoden erstellen, um dies zu tun?
Ist es trotzdem eine gute Idee, diesen Weg zu prüfen, wenn ein Benutzer eine Erlaubnis hat? Für einen WebService könnte ich mir vorstellen, dass es in Ordnung ist, aber ich habe Zweifel, ob dies als normale API (Assembly) verwendet wird.
Das ist sehr interessant! Ich bin schon mal auf PostSharp gestoßen, konnte mir nur vorstellen, dass es für die Protokollierung nützlich ist. Ich sehe, dass ich Zugang zu den Parametern der Methode innerhalb des Aspekts habe, also würde ich immer noch den Benutzerparameter haben, benutze ihn einfach nicht innerhalb der Methode? –
Der folgende Link zeigt ein empfohlenes Muster für die Autorisierung mit PostSharp. http://www.postsharp.org/aop-net/overview –