2016-06-10 3 views
0

Hallo Ich möchte Sicherheitsattribute auf regulären Instanzmethoden setzen. Hier ein Beispiel:Sind Attribute auf regulären Methoden möglich

[EnsureUserIsAdmin] //I want something like this 
public IEnumerable<NameItem> GetNameItems(int Id) 
{ 
    return _nameDataController.GetNameItems(Id); 
} 

Diese Methode ist in meiner Geschäftslogik. Jeder andere Code, der diese Methode verwendet, muss überprüft werden, um festzustellen, ob der Benutzer ein Administrator ist. Wenn es möglich ist, dies zu tun, wie würde ich Einheit testen?

+0

Sie Frage ist nicht klar. Attribute, die einmal mit '[AttributeUsage (AttributeTargets.Method)]' versehen wurden, können in jede Methode eingefügt werden. Attribute sind nur Metadaten über die Methode, an die sie angehängt ist. – Nkosi

+0

Sagen Sie, dass 'EnsureUserIsAdmin' eine benutzerdefinierte Attributklasse ist, die Sie in Ihre Geschäftslogik geschrieben haben? Oder woher kam das? –

+0

Lesen Sie diesen Link zum Erstellen eines benutzerdefinierten Attributs - https://msdn.microsoft.com/en-us/library/mt653985.aspx – Sanket

Antwort

1

Angenommen, Sie fragen, ob Sie den Zugriff auf Methoden mithilfe eines Attributs willkürlich einschränken können, wenn das Sicherheitsprinzipalobjekt Ihrer Anwendung ein Windows-Principal ist (z. B. Active Directory oder Windows-Authentifizierung). Ja, Sie können, mit der PrincipalPermission Attribute.

[PrincipalPermission(SecurityAction.Demand, Role = "MyAdminRole")] 
public void TestMethod() 
{ 

} 
0

Filterattribut Im Gegensatz zu normalen Attribute, befindet sich auf Controller Actions und ist Teil des ASP.NET Controller Ausführungsprozesses und werden gesammelt und durch den Motor ausgeführt Routing.

Die Lösung ist nicht out-of-the-box und erfordert eine nicht unerhebliche Komplexität. Im Falle einer Nicht-Aktionsmethode haben Sie die Möglichkeit, eine eigene kontrollierte Umgebung zu erstellen, die begrenzt und ein wenig erzwungen wird.

Ich würde dagegen und verwenden normale Methode Voraussetzungen oder Aufruf einer anderen Validierungsmethode innerhalb Ihrer Zielmethode auf "Sicherheit" oder andere Validierungen, aber sicherlich nicht Attribute zu testen.

Wenn Sie weiterhin Attribute verwenden möchten, kann das Folgende eine Lösung sein.

Sie müssen irgendeine Art von CustomSecurityManager machen, die die gezielte Methode Sie wollen ausführen, er die Aufgaben haben:

  1. Suche nach der Zielmethode sie
  2. Sammeln bestimmte benutzerdefinierte Attribute und ausgeführt wird, Ausnahmebedingung oder Rückgabe false, wenn Probleme auftreten.
  3. Führen Sie die Methode aus, wenn die Attribute gültig sind.

Hinweis: Nur der CustomSecurityManager die GetNameItems ruft.

Komponententests können durchgeführt werden, indem ein ICustomSecurityManager injiziert wird, der verspottet wird, um erwartete Ergebnisse zurückzugeben.

Verwandte Themen