PermitOnly

Chiamando il metodo PermitOnly si ottiene lo stesso effetto prodotto dalle chiamate al metodo Deny, ma è differente il modo in cui vengono specificate le condizioni in base alle quali il controllo di protezione non avrà esito positivo. Invece di specificare la risorsa cui non è consentito accedere, come nel caso del metodo Deny, mediante PermitOnly vengono specificate le sole risorse cui è consentito accedere. La chiamata a PermitOnly per l'autorizzazione X equivale quindi alla chiamata di Deny per tutte le autorizzazioni tranne che per l'autorizzazione X. Se si chiama PermitOnly, sarà possibile utilizzare il codice per accedere solo alle risorse protette dalle autorizzazioni specificate al momento della chiamata a PermitOnly. È consigliabile utilizzare PermitOnly invece di Deny quando è preferibile descrivere le risorse a cui è possibile accedere anziché quelle a cui non è consentito accedere.

Se il codice chiama PermitOnly su un'autorizzazione P1 e successivamente dei chiamanti downstream chiamano Demand sull'autorizzazione P2, la chiamata di PermitOnly influenza il risultato dell'elaborazione dello stack solo se P1 e P2 sono di tipo differente e se P2 non è un sottoinsieme di P1.

Nei frammenti di codice seguenti viene illustrato l'utilizzo della sintassi dichiarativa per eseguire l'override dei controlli di protezione mediante il metodo PermitOnly. I chiamanti non possono utilizzare questo codice per accedere ad alcuna risorsa protetta, eccetto le risorse di interfaccia utente. .

Option Explicit
Option Strict
Imports System
Imports System.Security.Permissions
Public Class MyClass1
   Public Sub New()
   End Sub   
   <UIPermissionAttribute(SecurityAction.PermitOnly, Unrestricted := True)> Public Sub 
   ReadRegistry()
      'Access a UI resource.
   End Sub
End Class
[C#]
using System;
using System.Security.Permissions;

public class MyClass
{
   public MyClass() {    
   }   
   
   [UIPermissionAttribute(SecurityAction.PermitOnly, Unrestricted=true)]
   public void ReadRegistry() { 
      //Access a UI resource.
   }  
}

Nel seguente esempio di codice viene illustrato l'utilizzo della sintassi imperativa per eseguire l'override dei controlli di protezione mediante il metodo PermitOnly. Al costruttore UIPermission viene passato un oggetto PermissionState che specifica le risorse di interfaccia utente a cui è necessario consentire l'accesso. Una volta che il metodo PermitOnly è stato chiamato, il codice e tutti i chiamanti possono essere utilizzati esclusivamente per accedere alle risorse di interfaccia utente.

Option Explicit
Option Strict
Imports System
Imports System.Security.Permissions
Public Class MyClass1
   Public Sub New()
   End Sub
   Public Sub ReadRegistry()
      Dim MyPermission As New UIPermission(PermissionState.Unrestricted)
      MyPermission.PermitOnly()
      'Access a UI resource.
   End Sub 
End Class
[C#]
using System;
using System.Security.Permissions;

public class MyClass {
   public MyClass() {    
   }   
   public void ReadRegistry() { 
      UIPermission MyPermission = new UIPermission(PermissionState.Unrestricted);
      MyPermission.PermitOnly();
      //Access a UI resource.
   }  
}

Vedere anche

Estensione di metadati mediante attributi | Override dei controlli di protezione | Protezione dall'accesso di codice | Deny | PermissionState