Share via


Sicurezza imperativa

Mediante la sintassi di sicurezza imperativa viene generata una chiamata di sicurezza attraverso la creazione di una nuova istanza dell'oggetto autorizzazione che si desidera richiamare. È possibile utilizzare la sintassi imperativa per eseguire pretese e override, ma non richieste.

Prima di effettuare la chiamata di sicurezza, è necessario inizializzare i dati di stato dell'oggetto autorizzazione in modo che tale oggetto rappresenti la forma specifica di autorizzazione richiesta. Quando si crea un oggetto FileIOPermission, ad esempio, è possibile utilizzare il costruttore per inizializzare l'oggetto FileIOPermission in modo che rappresenti l'accesso illimitato a tutti i file oppure nessun accesso ai file. In alternativa, è anche possibile utilizzare un oggetto FileIOPermission differente, passando parametri che indicano il tipo di accesso che è necessario che venga rappresentato dall'oggetto (vale a dire in lettura, per accodamento o in scrittura) e i file che è necessario che vengano protetti dall'oggetto.

Oltre che per richiamare un singolo oggetto di sicurezza, è possibile utilizzare la sintassi di sicurezza imperativa per inizializzare un gruppo di autorizzazioni denominato set di autorizzazioni. Questa tecnica rappresenta ad esempio l'unico modo per eseguire in maniera affidabile chiamate di assert su più autorizzazioni in un unico metodo. Utilizzare le classi PermissionSet e NamedPermissionSet per creare un gruppo di autorizzazioni e quindi chiamare il metodo opportuno per richiamare la chiamata di sicurezza desiderata.

È possibile utilizzare la sintassi imperativa per eseguire pretese e override, ma non richieste. La sintassi imperativa può essere utilizzata per pretese e override in sostituzione alla sintassi dichiarativa quando le informazioni necessarie a inizializzare lo stato di autorizzazione sono note solo in fase di esecuzione. Se ad esempio si desidera garantire che i chiamanti dispongano dell'autorizzazione alla lettura di un determinato file, di cui però non si conoscerà il nome fino alla fase di esecuzione, utilizzare una pretesa imperativa. È anche possibile scegliere di effettuare controlli imperativi invece di controlli dichiarativi quando si intende determinare in fase di esecuzione se una condizione sia valida e, a seconda dei risultati del test, se generare o meno una pretesa di sicurezza.

Nel frammento di codice che segue viene illustrato l'utilizzo della sintassi imperativa per richiedere che i chiamanti del codice dispongano di un'autorizzazione personalizzata denominata MyPermission. Si tratta di un'autorizzazione personalizzata fittizia, che non esiste realmente in .NET Framework. Una nuova istanza di MyPermision viene creata in MyMethod e protegge solo questo metodo con la chiamata di sicurezza.

Public Class MyClass1
   
   Public Sub New()

   End Sub
   
   Public Sub MyMethod()
      'MyPermission is demanded using imperative syntax.
      Dim Perm As New MyPermission()
      Perm.Demand()
      'This method is protected by the security call.
   End Sub
   
   Public Sub YourMethod()
      'YourMethod 'This method is not protected by the security call.
   End Sub
End Class
public class MyClass {
   public MyClass(){
    
   }

   public void MyMethod() {
       //MyPermission is demanded using imperative syntax.
       MyPermission Perm = new MyPermission();
       Perm.Demand();
       //This method is protected by the security call.
   }

   public void YourMethod() {
       //This method is not protected by the security call.
   }
}

Vedere anche

Riferimenti

FileIOPermission

Classe SystemSecurityPermissionSet

NamedPermissionSet

Concetti

Sintassi di sicurezza

Sicurezza dall'accesso di codice

Set di autorizzazioni denominati

Utilizzo del metodo Assert