Sicurezza dichiarativa utilizzata per l'ambito classe e membro
La sicurezza dichiarativa può essere eseguita su classi, membri e classi annidate. In questa sezione sono descritte le regole utilizzate per valutare la sicurezza dichiarativa quando è applicata a più livelli della stessa classe.
Importante |
---|
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. |
Classi, membri e sicurezza dichiarativa
Quando viene applicata la sicurezza dichiarativa per la stessa azione di sicurezza sia a livello di classe che a livello di metodo, si verifica quanto indicato nella seguente tabella.
Azione di sicurezza |
Comportamento di .NET Framework 2.0 |
Comportamento di .NET Framework versione 4 |
---|---|---|
Demand |
Gli attributi a livello di metodo e quelli a livello di classe vengono uniti in un singolo set di autorizzazioni per entrambi i livelli. |
Il comportamento rimane invariato. |
LinkDemand |
Gli attributi a livello di metodo e quelli a livello di classe vengono uniti. |
Il comportamento rimane invariato. |
InheritanceDemand |
Gli attributi a livello di classe richiedono l'autorizzazione specificata per eseguire la derivazione dalla classe. Gli attributi a livello di metodo richiedono l'autorizzazione specificata per eseguire l'override del metodo in una classe derivata. Poiché le richieste di ereditarietà hanno significati diversi per classi e metodi, le dichiarazioni possono essere applicate in modo indipendente a livello di classe e metodo. |
Il comportamento rimane invariato. |
Assert |
Gli attributi a livello di metodo e quelli a livello di classe vengono uniti in un singolo set di autorizzazioni per entrambi i livelli. |
Il comportamento rimane invariato. |
Deny |
Gli attributi a livello di metodo e quelli a livello di classe vengono uniti in un singolo set di autorizzazioni per entrambi i livelli. |
Obsoleto in .NET Framework 4. |
PermitOnly |
Gli attributi a livello di metodo e quelli a livello di classe vengono intersecati in un singolo set di autorizzazioni per entrambi i livelli. |
Il comportamento rimane invariato. |
Se le operazioni di sicurezza sono diverse, come nel caso di una richiesta a livello di classe con un'asserzione a livello di metodo, non si verifica alcuna interazione e sono valutate entrambe.
Classi annidate e sicurezza dichiarativa
Quando si applica la sicurezza dichiarativa alle classi, questa non viene estesa a eventuali classi annidate o metodi di classi annidate. Quando la sicurezza dichiarativa è applicata a classi annidate o metodi di una classe annidata, non viene estesa nemmeno alle classi padre. La sicurezza dichiarativa va applicata alle classi annidate come se si trattasse di classi distinte.
Nell'esempio riportato di seguito è illustrata un'autorizzazione ipotetica richiesta a livello di una classe denominata Main. All'interno di questa classe è definita una classe annidata denominata Nested. In questo esempio, la richiesta non si applica alla classe annidata.
<SomePermissionAttribute(SecurityAction.Demand, Unrestricted:=True)> _
Public Class Main
' This nested class is not influenced by the demand.
Public Class Nested
' This method is not influenced by the demand.
Public Sub MyMethod()
End Sub
End Class
End Class
[SomePermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
class Main
{
// This nested class is not influenced by the demand.
class Nested
{
// This method is not influenced by the demand.
public void MyMethod()
{
}
}
}