Utilizzo del metodo PermitOnly

Con la chiamata al metodo PermitOnly si ottiene sostanzialmente lo stesso effetto prodotto dalla chiamata al metodo Deny. La differenza è nel modo in cui vengono specificate le condizioni in base alle quali il controllo di sicurezza 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 di PermitOnly sull'autorizzazione X corrisponde pertanto alla chiamata di Deny su tutte le autorizzazioni ad eccezione dell'autorizzazione X. Se si chiama PermitOnly, il codice può essere utilizzato per accedere solo alle risorse protette dalle autorizzazioni specificate quando si chiama PermitOnly. È consigliabile utilizzare PermitOnly invece di Deny quando è preferibile descrivere le risorse a cui è possibile accedere anziché quelle a cui non è consentito accedere.

NotaNota

In .NET Framework versione 4 il supporto di runtime è stato rimosso per l'applicazione delle richieste di autorizzazione Deny, RequestMinimum, RequestOptional e RequestRefuse.Queste richieste non devono essere utilizzate nel codice basato su .NET Framework 4 o versioni successive.Per ulteriori informazioni su questa e altre modifiche, vedere Modifiche della sicurezza in .NET Framework 4.

Se il codice chiama PermitOnly su un'autorizzazione P1 e successivamente dei chiamanti downstream pretendono l'autorizzazione P2, la chiamata di PermitOnly influenza il risultato dell'analisi 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 sicurezza 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
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 sicurezza 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
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

Riferimenti

Utilizzo del metodo Deny

PermissionState

Concetti

Estensione di metadati mediante attributi

Override dei controlli di sicurezza

Sicurezza dall'accesso di codice