Esporta (0) Stampa
Espandi tutto

Metodo CodeAccessPermission.PermitOnly

Aggiornamento: Luglio 2008

Impedisce ai chiamanti in posizione più elevata nello stack di chiamate di utilizzare il codice che chiama questo metodo per accedere a tutte le risorse ad eccezione della risorsa specificata dall'istanza corrente.

Spazio dei nomi:  System.Security
Assembly:  mscorlib (in mscorlib.dll)

public void PermitOnly()
public final void PermitOnly()
public final function PermitOnly()

Implementa

IStackWalk.PermitOnly()

EccezioneCondizione
SecurityException

Un metodo PermitOnly attivo per il frame corrente esiste già.

Nota importante:

Il metodo PermitOnly deve essere utilizzato soltanto per proteggere le risorse dall'accesso accidentale da parte di codice completamente attendibile. Per contro, non deve essere utilizzato per proteggere le risorse da un utilizzo improprio intenzionale da parte di codice non attendibile. Ad esempio, se il metodo A emette un oggetto PermitOnly per un'autorizzazione e poi chiama il metodo B, il metodo B può chiaramente eseguire l'override di PermitOnly mediante l'emissione di un oggetto Assert. Il metodo chiamato è sempre in posizione più elevata nello stack. Di conseguenza, se il metodo B tenta di accedere a una risorsa protetta, il sistema di protezione inizia a verificare le autorizzazioni, in quanto il metodo B è il chiamante immediato, quindi percorre lo stack per accertare che non vi siano oggetti Deny o PermitOnly in posizioni inferiori all'interno dello stesso. Il metodo B, che sta tentando di accedere alla risorsa, può arrestare immediatamente il percorso stack utilizzando il metodo Assert. In tal caso, l'oggetto PermitOnly collocato nello stack dal metodo A (metodo chiamante) non viene mai individuato.

PermitOnly è simile a Deny, perché entrambi provocano l'arresto dei percorsi di stack mentre in circostanze diverse avrebbero esito positivo. La differenza è rappresentata dal fatto che Deny specifica le autorizzazioni che provocano l'arresto del percorso di stack, mentre PermitOnly specifica solo le autorizzazioni che non provocano l'arresto del percorso di stack.

Chiamare questo metodo per fare in modo che il codice possa essere utilizzato per accedere solo alle risorse specificate. La chiamata a PermitOnly è efficace fino a che il codice chiamante torna al chiamante. Solo un PermitOnly può essere attivo su un frame. Un tentativo di chiamare PermitOnly quando nel frame esiste un PermitOnly attivo risulta in SecurityException. Chiamare RevertPermitOnly o RevertAll per rimuovere un PermitOnly attivo.

PermitOnly viene ignorato per un'autorizzazione non concessa in quanto la richiesta di quell'autorizzazione non avrà esito positivo. Tuttavia, se il codice in posizione inferiore nello stack di chiamate chiama successivamente Demand per l'autorizzazione, viene generata una SecurityException quando il percorso dello stack raggiunge il codice che ha tentato di chiamare PermitOnly. Questo si verifica perché al codice che ha chiamato PermitOnly non è stata concessa l'autorizzazione, anche se se ha chiamato PermitOnly per l'autorizzazione. Lo stack delle chiamate presenta in genere una struttura tale per cui i metodi nella parte superiore dello stack chiamano i metodi nella parte inferiore.

Note per gli eredi:

Non è possibile sottoporre il metodo a override.

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo del metodo PermitOnly per limitare l'accesso a tutte le risorse fatta eccezione per la risorsa specificata dall'istanza corrente. Questo esempio di codice fa parte di un esempio più esaustivo fornito per il metodo RevertAll.

// Grant access only to OwnClipboard.
Console.WriteLine("Granting permission only for OwnClipboard access.");
clipboardPermission.PermitOnly();
DemandAllClipboardAccess();
// Revert the PermitOnly with a call to RevertPermitOnly.
Console.WriteLine("Reverting the PermitOnly.");
CodeAccessPermission.RevertPermitOnly();
DemandAllClipboardAccess();


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0

Date

Cronologia

Motivo

Luglio 2008

Aggiunta nota importante circa l'utilizzo consigliato del metodo.

Commenti e suggerimenti dei clienti.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft