Übergabe von Func als Attributparameter zur Sicherung von MVC-Routen

8

Ich versuche, meine MVC-Routen von einer Gruppe von Benutzern zu sichern, die eine Reihe von Kriterien erfüllen. Da MVC anscheinend ziemlich viele Attribute verwendet und Steven Sanderson eine für die Erweiterbarkeit der Sicherheit in seinem pro MVC-Buch benutzt, habe ich angefangen, diesen Weg zu gehen, aber ich möchte die Regel im Zusammenhang mit der Aktion definieren, auf die ich sie anwende / p>

Einige Aktionen sind nur für Mitarbeiter, manche nicht.

Einige Aktionen sind nur für Firma1, manche nicht.

Also habe ich diese Art der Nutzung gedacht ...

%Vor%

Sieht für mich ziemlich sauber aus und ist wirklich ziemlich einfach zu implementieren, aber ich bekomme den folgenden Compilerfehler:

'BlockUsersWhere' ist kein gültiges benannter Attributargument, da es kein gültiger Attributparametertyp ist

Anscheinend können Sie einen Func nicht als Attributargument verwenden. Irgendwelche anderen Vorschläge, um dieses Problem oder etwas anderes zu umgehen, das die einfache Verwendung bietet, die wir in unseren MVC-Projekten lieben gelernt haben?

    
jjr2527 28.07.2010, 21:17
quelle

2 Antworten

4

Der Vorschlag von Necros würde funktionieren, allerdings müssten Sie seinen Helfer SecurityGuard im Körper jeder Aktionsmethode aufrufen.

Wenn Sie immer noch mit dem deklarativen attributbasierten Ansatz (der den Vorteil hat, dass Sie das Attribut auf den gesamten Controller anwenden können) gehen, könnten Sie Ihr eigenes AutorisierenAttribut

%Vor%

Dann würden Sie es wie folgt verwenden

%Vor%     
marcind 29.07.2010, 00:14
quelle
1

Da Sie nur Konstanten, Typen oder Arrayinitialisierer in Attributparametern verwenden können, werden sie wahrscheinlich nicht funktionieren, oder zumindest wird das nicht so flexibel sein.

Alternativ könnten Sie etwas Ähnliches verwenden, das mir bei der Lösung dieses Problems einfällt.

Dies ist die API:

%Vor%

Erstellen Sie dann einen Ausdrucksersteller:

%Vor%

Implementieren Sie die Sicherheitsausdrücke:

%Vor%

Sie können beliebig viele benutzerdefinierte Ausdrücke hinzufügen. Die Infrastruktur ist ein bisschen kompliziert, aber die Nutzung ist wirklich einfach:

%Vor%

Sie können den Ausdruck auch verketten und als Bedingung verwenden (z. B. SecurityGuard.Require() ).

Sry für lange Post, hoffe das hilft.

    
Necros 28.07.2010 21:49
quelle

Tags und Links