2010-08-20 6 views

Antwort

11

Die meisten Sicherheitsberechtigungen sind besonders nützlich, wenn Sie wiederverwendbare Bibliotheken erstellen, die teilweise vertrauenswürdig ausgeführt werden. Auf diese Weise können Sie den Zugriff auf bestimmte Funktionen einschränken, wenn eine aufrufende Assembly oder AppDomain nicht über die richtigen Berechtigungen verfügt. Für eine Anwendung, die vollständig vertrauenswürdig ausgeführt wird, sind die meisten Sicherheitsberechtigungen nicht so nützlich.

Allerdings gibt es ein Attribut, das ich häufig verwende und das ist die PrincipalPermissionAttribute. Wenn Sie eine Klasse oder Funktion mit diesem Attribut dekorieren, überprüft .NET bei jedem Zugriff, ob das aktuelle Thread-Prinzip die richtigen Rechte hat. Mit anderen Worten, Sie können den Zugriff auf diesen Code basierend auf der Rolle eines Benutzers zulassen oder verweigern (rollenbasierte Sicherheit). Hier ein Beispiel:

[PrincipalPermission(SecurityAction.Demand, Role = "Managers")] 
public static void ShowSalaryForEmployee(Employee employee) 
{ 
    // code here. 
} 

UPDATE 2017:

Die Antwort oben ist völlig veraltet. Ich habe vor einigen Jahren aufgehört, dieses spezielle Attribut zu verwenden, da es eine CLR-integrierte Codewebtechnik verwendet, die es sehr schwierig macht, Unit- und Integrationstests durchzuführen, bei denen Sie nicht speziell den Sicherheitsaspekt des Codes testen möchten.

Stattdessen fand ich es viel besser, meine eigenen Attribute zu definieren, die Berechtigungen für Operationen deklarieren (normalerweise durch Nachrichten definiert) und die Autorisierung auf der Infrastrukturebene implementieren (normalerweise mit Dekorator), anstatt sich auf Codeweben zu verlassen.

Verwandte Themen