Bestimmen Sie, ob ein Benutzer Zugriff auf eine bestimmte Controller-Aktion basierend auf der Rolle hat

9

Ich versuche ein dynamisches Menü für meine ASP.NET MVC4 web application zu erstellen. Während ich das Menü erstelle, möchte ich sicherstellen, dass Menüpunkte, auf die ein Benutzer keinen Zugriff haben sollte, nicht im Menü angezeigt werden.

Ich verwende die Formularauthentifizierung und das Attribut [Authorize] , wobei jede Seite eine bestimmte Rolle erfordert.

Wie kann ich mit zwei Zeichenketten (Controller and Action) und einem angemeldeten Benutzer feststellen, ob ein Benutzer Zugriff auf diese Controller-Aktion hat?

Alle meine Menüdaten sind in einer Datenbank gespeichert. Mein Plan, das Menü zu rendern, besteht darin, ein JSON-Objekt der Menüdaten zu erstellen und dieses in die Ansicht einzubetten. Dann verwende ich clientseitig Handlebars.js und schließe das Menü JSON object an eine Vorlage an.

Was ich versuche, ist die Überprüfung der Berechtigungen für einen bestimmten Controller / eine bestimmte Aktion für einen Benutzer, während ich die Menüdaten rendere. Mein erster Gedanke war, Reflektion zu verwenden und nach der Controller-Aktionsmethode zu suchen und nach dem Vorhandensein eines Authorize-Attributs zu suchen und zu überprüfen, ob der aktuell angemeldete Benutzer die erforderliche Rolle hat, um auf diese Seite zuzugreifen. Wenn nicht, würde der Menüeintrag nicht gerendert werden.

Ich bin immer zurückhaltend, reflection zu verwenden, aber normalerweise ist dies ein einfacherer Weg, Dinge zu tun.

    
jdavis 17.01.2013, 15:22
quelle

7 Antworten

1
%Vor%

dann

%Vor%     
user355308 14.08.2014 11:18
quelle
0

Ich habe ein sehr ähnliches Szenario implementiert. Der einzige Unterschied ist, dass meine Menüs in XML-Dateien gespeichert sind.

Da Sie Ihre Menüdaten in einer Datenbank gespeichert haben, schlage ich vor, dass Sie jedem Menüeintrag ein xml-Feld hinzufügen, das Sicherheitsinformationen enthält. oder, haben Sie eine neue Tabelle, die Menüelemente den Benutzern zuordnet. Die Tabelle kann wie folgt aussehen:

%Vor%

Wenn Ihr Controller nun die Anforderung empfängt, die dazu führt, dass Menüelemente angezeigt werden, und Ihr Controller mit dem Autorize-Attribut versehen ist, empfängt er den Benutzer im HttpContext. Hier fragen Sie einfach die Datenbank nach passenden Menüpunkten ab und rendern das Menü entsprechend.

    
gush 22.05.2013 08:12
quelle
0

Verwenden Sie das ActionFilter-Attribut, um die Benutzer basierend auf der Rolle zu filtern Ссылка

    
Mano1822 01.12.2013 09:21
quelle
0

Erstellen Sie die Klasse namens Rolevalidation und fügen Sie den Code wie folgt hinzu:

%Vor%

Fügen Sie diesen Code in den Anfang aller Controller ein * [AuthorizeRoles (Roles="SuperAdmin")]

    
user3217843 17.02.2014 07:41
quelle
0

Angenommen, Sie haben eine Ansicht, die den gesamten Menü-HTML-Code enthält, ist wahrscheinlich besser, wenn Sie nur:

verwenden %Vor%

Hoffe, das hilft!

    
Edgardo 05.09.2014 14:05
quelle
0

Die Links werden vom json-Objekt erzeugt, das von einer Aktion und einem Controller kommt.

Das json-Objekt sollte eine Liste von Links haben (oder was auch immer benötigt wird, um den Menüeintrag zu implementieren), die Liste sollte nach Art der in der Datenbank gespeicherten Einstellungen generiert werden und jedem Benutzer mitteilen, welche Links angezeigt werden sollen.

Neben dem, wenn der Benutzer die URL hat, müssen Sie in diesem Fall

verwenden

Ссылка

    
Mahmoud Hboubati 03.04.2014 10:09
quelle
-1

Sie können ein Autorize-Attribut verwenden, mit dem Sie eine Aktion vom Controller [Authorize(AuthorizationContext)] dekorieren können, oder Sie können das authorize-Attribut für die benutzerdefinierte Autorisierung erweitern;

Sie können auch einige Konventionen in einem Dictionary definieren, in dem Sie definieren, dass eine Create-Aktion eines Controllers eine Berechtigung vom Typ create type a.s.o benötigt.

%Vor%

und überschreiben Sie die Methoden OnAuthorization und Authorize von AuthorizeAttribute und überprüfen Sie die Konvention, wenn die Aktion die im Wörterbuch definierten Konventionen einhält, oder überprüfen Sie eine bestimmte Bedingung, in der Sie Authorize(AuthorizationContext) für die Aktion oder% co_de angeben %.

Mit dem Menü können Sie einen Autorisierungsdienst erstellen, in dem Sie die Rechte des aktuellen Benutzers zurückgeben und eine Klasse hinzufügen, die die Rechte des Benutzers enthält und Sie überprüfen das Modell beim Rendern des Modells, wenn ein Menüelement gerendert werden soll nicht.

Autorisieren von Attribut-MSDN

    
TigOldBitties 17.01.2013 15:39
quelle