Verwenden von deklarativer Sicherheit mit Klassen- und Memberbereich
Aktualisiert: November 2007
Deklarative Sicherheit kann für Klassen, Member und geschachtelte Klassen ausgeführt werden. In diesem Abschnitt werden die Regeln zum Auswerten der deklarativen Sicherheit dargestellt, wenn diese auf mehrere Ebenen derselben Klasse angewendet wird.
Klassen, Member und deklarative Sicherheit
Wenn deklarative Sicherheit für dieselbe Sicherheitsaktion sowohl auf Klassen- als auch auf Methodenebene besteht, wird die deklarative Sicherheit entsprechend der folgenden Tabelle angewendet.
Sicherheitsaktion |
Verhalten von .NET Framework, Version 1.0 und 1.1 |
Verhalten von .NET Framework, Version 2.0 |
---|---|---|
Forderung |
Attribute auf Methodenebene überschreiben Attribute auf Klassenebene. (Wenn eine deklarative Forderung auf der Methodenebene platziert wird, wird eine deklarative Forderung auf Klassenebene ignoriert.) |
Attribute auf Methoden- und Klassenebene werden für beide Ebenen in einem Berechtigungssatz vereint. |
Verknüpfungsaufruf |
Attribute auf Methoden- und Klassenebene werden vereint. |
Keine Änderung im Verhalten. |
Vererbungsanforderung |
Attribute auf Klassenebene erfordern die angegebene Berechtigung, um von der Klasse ableiten zu können. Attribute auf Methodenebene erfordern die angegebene Berechtigung, um die Methode in einer abgeleiteten Klasse zu überschreiben. Weil Vererbungsanforderungen für Klassen und Methoden verschiedene Bedeutungen haben, können Deklarationen sowohl auf Klassen- als auch auf Methodenebene unabhängig angewendet werden. |
Keine Änderung im Verhalten. |
Assert |
Attribute auf Methodenebene überschreiben Attribute auf Klassenebene. |
Attribute auf Methoden- und Klassenebene werden für beide Ebenen in einem Berechtigungssatz vereint. |
Deny |
Attribute auf Methodenebene überschreiben Attribute auf Klassenebene. |
Attribute auf Methoden- und Klassenebene werden für beide Ebenen in einem Berechtigungssatz vereint. |
Permit only |
Attribute auf Methodenebene überschreiben Attribute auf Klassenebene. |
Von Attributen auf Methoden- und Klassenebene wird die Schnittmenge gebildet und in einen Berechtigungssatz für beide Ebenen übernommen. |
Wenn die Sicherheitsaktionen verschieden sind (z. B. eine Forderung auf Klassenebene mit einer Assertion auf Methodenebene), findet keine Interaktion statt, und beide werden ausgewertet.
Geschachtelte Klassen und deklarative Sicherheit
Wenn Sie deklarative Sicherheit auf Klassen anwenden, wird diese nicht in geschachtelten Klassen oder Methoden von geschachtelten Klassen verbreitet. Umgekehrt wird deklarative Sicherheit ebenfalls nicht in den übergeordneten Klassen verbreitet, wenn sie auf geschachtelte Klassen oder Methoden einer geschachtelten Klasse angewendet wurde. Sie müssen deklarative Sicherheit auf geschachtelte Klassen genauso anwenden wie auf separate Klassen.
Im folgenden Beispiel wird eine hypothetische Berechtigung auf der Klassenebene der Klasse Main angefordert. Innerhalb dieser Klasse wird die geschachtelte Klasse Nested definiert. In diesem Beispiel wird die Forderung nicht auf die geschachtelte Klasse angewendet.
<SomePermissionAttribute(SecurityAction.Demand, Unrestricted:=True)> _
Public Class Main
' This nested class is not influenced by the demand.
Public Class Nested
' This method is not influenced by the demand.
Public Sub MyMethod()
End Sub
End Class
End Class
[SomePermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
class Main
{
// This nested class is not influenced by the demand.
class Nested
{
// This method is not influenced by the demand.
public void MyMethod()
{
}
}
}