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

Override dei controlli di sicurezza

Durante un controllo di sicurezza viene solitamente esaminato ogni chiamante compreso nello stack di chiamate per verificare che disponga dell'autorizzazione specificata. È tuttavia possibile eseguire l'override del risultato dei controlli di sicurezza chiamando i metodi Assert o PermitOnly su un singolo oggetto autorizzazioni o su un oggetto set di autorizzazioni. In base al metodo chiamato, il controllo di sicurezza avrà esito positivo o negativo, anche qualora non siano state controllate le autorizzazioni di tutti i chiamanti compresi nello stack.

Nota importante Importante

In .NET Framework 4 il supporto di runtime è stato rimosso per l'applicazione delle richieste di autorizzazione Deny e RevertDeny. 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.

Ogni volta che un metodo chiama un altro metodo, viene generato nello stack di chiamate un nuovo frame in cui memorizzare le informazioni relative al metodo chiamato. In questo contesto, l'utilizzo di costruttori e l'accesso a proprietà sono considerati chiamate al metodo. In ogni frame dello stack sono contenute informazioni sulle varie chiamate effettuate dal metodo ad Assert o PermitOnly. Se un chiamante utilizza più di un Assert o PermitOnly nella stessa chiamata al metodo, in base all'ambiente di esecuzione vengono applicate le seguenti regole di elaborazione, in grado di influenzare il comportamento dell'override:

  • Se, durante l'analisi dello stack, viene rilevato più di un override dello stesso tipo, ad esempio due chiamate ad Assert, in uno stesso frame di stack, al secondo override verrà generata un'eccezione.

  • Quando nello stesso frame di stack sono presenti override differenti, tali override verranno elaborati nell'ordine seguente: prima PermitOnly, quindi Assert.

Per sostituire un override è necessario chiamare il metodo di annullamento appropriato, ad esempio RevertAssert, e quindi applicare il nuovo override.

Nota Nota

È necessario che gli override nell'analisi dello stack non vengano mai effettuati in un costruttore di classe, perché non vi è alcuna garanzia che il codice del costruttore venga eseguito in un determinato punto o in un particolare contesto. Dal momento che lo stato dello stack di chiamate in un costruttore di classe non è ben definito, gli override dell'analisi dello stack effettuati in costruttori possono produrre risultati inattesi e indesiderati.

L'utilizzo dei metodi Assert o PermitOnly non risulta solitamente necessario per gli sviluppatori di applicazioni e tali metodi vengono raramente utilizzati dagli sviluppatori di componenti e di librerie di classi. Gli override della sicurezza sono, tuttavia, opportuni in determinate situazioni, descritte negli argomenti Assert e PermitOnly.

Nota Nota

Se si esegue un override (Assert, PermitOnly), è necessario annullare l'autorizzazione prima di eseguire lo stesso tipo di override nello stesso stack frame, ovvero nel metodo. In caso contrario, verrà generata un'eccezione SecurityException.

Utilizzare uno dei metodi statici elencati nella tabella riportata di seguito per annullare un override.

Metodo

Operazione

CodeAccessPermission.RevertAll

Provoca la rimozione di tutti i precedenti override per il frame corrente e li rende inefficaci.

CodeAccessPermission.RevertAssert

Provoca la rimozione dei precedenti Assert per il frame corrente e li rende inefficaci.

CodeAccessPermission.RevertPermitOnly

Provoca la rimozione dei metodi PermitOnly precedenti per il frame corrente e li rende inefficaci.

Mostra: