Share via


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