2016-12-13 1 views
0

In der Webanwendung, an der wir gerade arbeiten, haben wir Company Entität, die nur die Person bearbeiten kann, die sie erstellt hat.Ressourcenbasierte Autorisierung

Also jedes Mal, wenn die Aktion EditCompany aufgerufen wird, müssen wir die Datenbank überprüfen und sehen, ob der aktuell angemeldete Benutzer Besitzer des Unternehmens ist. Dies ist nur ein Beispiel, aber wir haben mehr Berechtigungsarten als Eigentümer und mehr Operationen mit Company.

Wir haben zu Beginn jeder Aktion eine Servicemethode aufgerufen, um zu sehen, ob dieser Benutzer die Berechtigung für diese Ressource benötigt, zum Beispiel companyService.HasEditPermission(userId, companyId), und wenn das wahr ist, haben wir weiter verfahren.

Aber vor kurzem hat mir jemand gesagt, dass ein solcher Code nicht im Controller sein sollte, aber ein benutzerdefiniertes Attribut sollte erstellt werden, das diese Berechtigungslogik behandelt und dann setzen wir dieses Attribut auf die Controlleraktion. Aber diese Person ist nicht Asp.Net Programmierer und er weiß nicht, wie es in Asp.Net umgesetzt werden sollte. Also meine Frage ist, ist es möglich, so etwas in Asp.Net zu tun und wenn ja, wie sollen wir das umsetzen?

Antwort

1

Also meine Frage ist, ist es möglich, so etwas in Asp.Net zu tun und wenn ja, wie sollen wir das umsetzen?

Ja, es ist perfekt möglich und es ist ein guter Weg, um Ihr Ziel zu erreichen.

Um dies zu implementieren, müssen Sie ein benutzerdefiniertes Filterattribut erstellen, das die AuthorizeAttribute-Klasse erweitert und deren OnAuthorization-Methode überschreibt. In der überschriebenen Methode können Sie die Request-Parameter überprüfen (verfügbar im Parameter filterContext) und Ihre Autorisierungslogik auslösen.