Hinzufügen der Unterstützung der deklarativen Sicherheit
Obwohl dies nicht unbedingt erforderlich ist, sollte eine benutzerdefinierte Berechtigung deklarative Sicherheit unterstützen. Entwickler können dann die benutzerdefinierte Berechtigung angeben, wenn sie für Sicherheitsaktionen wie Anforderungen, Forderungen oder Assertionen deklarative Syntax verwenden. Berechtigungsanforderungen, Verknüpfungsforderungen und Vererbungsforderungen können nur deklarativ erstellt werden. Daher kann eine benutzerdefinierte Codezugriffsberechtigung mit Verknüpfungsforderungen oder Vererbungsforderungen nur dann angefordert bzw. verwendet werden, wenn Sie Unterstützung für deklarative Sicherheit bereitstellen. In diesem Thema wird das Implementieren einer Attribute-Klasse beschrieben, die Unterstützung deklarativer Sicherheit für eine benutzerdefinierte Berechtigung ermöglicht.
Sicherheitsattribute für Deklarationen müssen direkt oder indirekt von der SecurityAttribute-Klasse abgeleitet werden. Im Fall von Codezugriffsberechtigungen wird die Attributklasse von CodeAccessSecurityAttribute abgeleitet, die wiederum von SecurityAttribute abgeleitet ist. Sicherheitsattributklassen müssen die CreatePermission-Methode implementieren, die eine Instanz des Berechtigungsobjekts aus der zugeordneten benutzerdefinierten Berechtigung erstellt. Beachten Sie, dass diese zugeordnete Berechtigungsklasse mit SerializableAttribute gekennzeichnet sein muss, um durch den Compiler in Metadaten serialisiert werden zu können. Weitere Informationen finden Sie unter Implementieren einer benutzerdefinierten Berechtigung.
Im folgenden Code wird eine Attributklasse für die boolesche Berechtigung CustomPermission
implementiert. In diesem Beispiel weist die Berechtigungsklasse eine einzige boolesche Unrestricted
-Eigenschaft auf, die ihren Zustand enthält.
<AttributeUsageAttribute(AttributeTargets.All, AllowMultiple := True)> Public Class
CustomPermissionAttribute
Inherits CodeAccessSecurityAttribute
Private myUnrestricted As Boolean = False
Public Shadows Property Unrestricted() As Boolean
Get
Return myUnrestricted
End Get
Set
myUnrestricted = value
End Set
End Property
Public Sub New(action As SecurityAction)
MyBase.New(action)
End Sub
Public Overrides Function CreatePermission() As IPermission
If Unrestricted Then
Return New CustomPermission(PermissionState.Unrestricted)
Else
Return New CustomPermission(PermissionState.None)
End If
End Function
End Class
[AttributeUsageAttribute(AttributeTargets.All, AllowMultiple = true)]
public class CustomPermissionAttribute: CodeAccessSecurityAttribute
{
bool unrestricted = false;
public new bool Unrestricted
{
get{ return unrestricted; }
set{ unrestricted = value; }
}
public CustomPermissionAttribute(SecurityAction action): base (action)
{
}
public override IPermission CreatePermission()
{
if(Unrestricted)
{
return new CustomPermission(PermissionState.Unrestricted);
}
else
{
return new CustomPermission(PermissionState.None);
}
}
}
In diesem Fall überprüft CreatePermission die interne Unrestricted
-Eigenschaft und erstellt die entsprechende Instanz eines CustomPermission
-Objekts. Während hier nur die Unrestricted
-Eigenschaft verwendet wird, müssen andere Klassen benutzerdefinierter Berechtigungsattribute alle möglichen Zustände der von ihnen unterstützten Berechtigungsobjekte unterstützen.
Die Verwendung von CustomPermissionAttribute
wird in der folgenden Deklaration einer Forderung veranschaulicht:
<CustomPermissionAttribute(SecurityAction.Demand, Unrestricted := true)>
[CustomPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
Siehe auch
Referenz
SecurityAttribute Class
CodeAccessSecurityAttribute Class
SerializableAttribute Class
Konzepte
Erstellen von eigenen Codezugriffsberechtigungen
Implementieren einer benutzerdefinierten Berechtigung
Weitere Ressourcen
Erweitern von Metadaten mithilfe von Attributen
Codezugriffssicherheit