2012-09-21 2 views
5

Das Problem, das ich lösen möchte, scheint mir sehr einfach zu sein: Meine Anwendung verfügt über ein Site-weites Menü, aus dem der Benutzer in verschiedene Bereiche navigieren kann. Die Menüelemente sind einfach Links zu ActionResult-Methoden. Ich verwende ein benutzerdefiniertes AuthorizeAttribute für die Aktionen, um die Berechtigungsrollen des Benutzers zu erzwingen. Das funktioniert gut, da es verhindert, dass der Benutzer die Aktion ausführt, wenn sie nicht die entsprechenden Rollen haben. Was ich jedoch tun möchte, ist nicht einmal die Menüoption, um zu dieser Aktion zu navigieren, wenn sie nicht dazu berechtigt sind.Ermitteln, ob die Controller-Aktion autorisiert ist, bevor sie aufgerufen wird

Also, auf der einfachsten Ebene, möchte ich in der Lage sein, so etwas zu tun:

var isAuthorized = IsAuthorized("ControllerName", "ActionName", currentUser); 

Die IsAuthorized Methode würde dann Blick auf irgendwelchen AuthorizeAttributes auf die Aktion, und bewerten, ob der angegebene Benutzer sein würde kann es ausführen.

Gibt es einen solchen Ansatz? Angenommen, wir haben keine Instanz des Controllers an dem Punkt, an dem wir diese Auswertung vornehmen.

+0

"eine benutzerdefinierte' AuthorizeAttribute' "- meinst du eine, die du selbst geschrieben hast, oder ist es eine der eingebauten mit diesem Namen? –

+0

Ja, eine, die ich selbst geschrieben habe, um spezifische Autorisierungsanforderungen zu implementieren. Wie in "public class MyAuthorizeAttribute: AuthorizeAttribute" – Dan

Antwort

5

Ein zweiter Durchlauf auf der Suche nach einem Ansatz zu diesem tatsächlich ergab genau das, was ich suchte. Ich werde diese Frage hier lassen, falls sie andere zu dieser Antwort führt.

Create an authorized action link extension for ASP.NET MVC 3

Die Implementierung verwendet nur um genau die Syntax ich suchte, und in der Praxis funktioniert.

+0

Sie sollten es als beantwortet markieren, auch wenn Sie der Beantworter sind. – labilbe

Verwandte Themen