2014-01-29 4 views
5

In meiner ASP.NET MVC-Website, meine Einrichtung ermöglicht Rollen Benutzer Zugriff zu haben, und Rollen haben Berechtigungen. Im Allgemeinen sind diese Berechtigungen für einen Controller festgelegt. Im Hauptnavigationsmenü meiner Website kann ein Authentifizierter Benutzer alle Elemente sehen, auch wenn sie nicht zum Zugriff auf diese Seite berechtigt sind.bester Weg, um Benutzerberechtigungen Von Ansicht

Derzeit kann ich nur das Menü Basis aus konfigurieren, wenn der Benutzer authentifiziert ist:

@if (Request.IsAuthenticated){ } 

Ich frage mich, was ist der beste Weg, die Berechtigungen des Benutzers auf einen Blick zu übergeben, nur zum Zweck der Konfiguration das Menü für diesen Benutzer? Gibt es einen gemeinsamen Weg, oder muss ich das selbst umsetzen? Ich habe nicht viele Informationen darüber gefunden, aber vielleicht verwende ich die falschen Suchbegriffe.

Vielen Dank für jede Beratung.

EDIT

Leider kann ich genug nicht klar. Dies ist mein Hauptnavigationsmenü auf der Seite _Layout. Auch zu einer Rolle zugewiesenen Berechtigungen sind sehr konfigurierbar von einem Admin (sie können auch erstellen und löschen Rollen), so überprüft, ob der Benutzer in einer Rolle ist nicht meine Bedürfnisse erfüllen.

Antwort

3

Sie könnten eine Aktion in sagen wir, schaffen die CommonController, die eine Teilansicht mit Ihrer Navigation zurück. Diese Teilansicht kann ein eigenes Modell haben, das vom Controller aus ausgefüllt werden kann. Dadurch können Sie beispielsweise die Abhängigkeitsinjektion verwenden.

Die Aktion könnte wie folgt aussehen:

[ChildActionOnly] 
public ActionResult Navigation() 
{ 
    var model = new NavigationModel(); 
    // populate the model.. 

    return PartialView("_Navigation", model); 
} 

Sie diese teilweise in der Ansicht (_Layout.cshtml in Ihrem Fall) wie folgt darstellen kann:

@Html.Action("Navigation", "Common") 

Für die meisten Fälle Request.IsAuthenticated ist gerade fein . Verwenden Sie das nur, wenn Sie etwas fortgeschritteneres brauchen.

+0

Tolle Idee! Habe es einfach implementiert und es funktioniert perfekt. Vielen Dank. – Jonesopolis

0

Der beste Weg wäre, eine Eigenschaft zu haben, auf dem Viewmodel, die die Sicht verwendet.

+0

gut mein Navigationsmenü ist in meinem Layout - alle Ansichten verwenden es – Jonesopolis

+0

dann würde ich sagen, dass Request.IsAuthenticated in Ordnung ist –

1

können Sie Roles Klasse statische Methode IsUserInRole:

@if (Roles.IsUserInRole("Admin")) 
{ 
    // ... 
}