Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Aggiunta del supporto della sicurezza dichiarativa

Benché non sia obbligatorio, è consigliabile che un'autorizzazione personalizzata supporti la sicurezza dichiarativa, in modo che gli sviluppatori possano specificarla quando utilizzano la sintassi dichiarativa per azioni di sicurezza quali richieste, pretese o asserzioni. In realtà, le richieste di autorizzazione e le pretese di collegamento e di ereditarietà possono essere effettuate solo in modo dichiarativo. Non è quindi possibile utilizzare l'autorizzazione di accesso al codice personalizzata per le pretese di collegamento o di ereditarietà se non è disponibile il supporto della sicurezza dichiarativa. In questo argomento viene illustrato come implementare una classe Attribute che abilita il supporto della sicurezza dichiarativa per le autorizzazioni personalizzate.

Nota Nota

La versione attributo dell'autorizzazione personalizzata deve essere definita in un assembly diverso dall'assembly in cui si fa riferimento a tale autorizzazione. In questo assembly va definita anche l'autorizzazione personalizzata. Questa condizione è obbligatoria per la sicurezza dichiarativa, perché l'attributo, eseguito al caricamento dell'assembly, potrebbe non essere stato creato al momento del rilevamento del riferimento. Il tentativo di utilizzare un'autorizzazione dichiarativa nello stesso assembly nel quale è definita comporta la generazione di un oggetto TypeLoadException.

È necessario che gli attributi di sicurezza per le dichiarazioni derivino, direttamente o indirettamente, dalla classe SecurityAttribute. Se si tratta di un'autorizzazione di accesso al codice, la classe Attribute deriva dalla classe CodeAccessSecurityAttribute, a sua volta derivata da SecurityAttribute. È necessario che le classi di attributi di protezioni implementino il metodo CreatePermission, che crea un'istanza dell'oggetto autorizzazione dall'autorizzazione personalizzata associata. Perché possa essere serializzata nei metadati dal compilatore, la classe di autorizzazioni personalizzata associata deve essere contrassegnata con SerializableAttribute. Per ulteriori informazioni, vedere Implementazione di un'autorizzazione personalizzata.

Mediante il codice riportato di seguito viene implementata una classe di attributi per un'autorizzazione Boolean denominata CustomPermission. Nell'esempio, la classe di autorizzazioni possiede un singola proprietà booleana Unrestricted contenente lo stato della classe.

[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 questo caso, CreatePermission controlla la proprietà interna Unrestricted e crea l'istanza appropriata di un oggetto CustomPermission. Mentre in questa situazione viene utilizzata solo la proprietà Unrestricted, è necessario che le altre classi di attributi di autorizzazioni personalizzate contemplino tutti gli stati possibili degli oggetti autorizzazioni supportati.

L'utilizzo di CustomPermissionAttribute viene illustrato nella seguente pretesa dichiarativa:

[CustomPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
Mostra: