LinkDemands, il corretto modo di utilizzarlo

Una cosa che non sapevo, e che desidero condividerla con gli (eventuali) lettori di questo blog: un link demand a livello di metodo sovrascrive sempre un link demand a livello di classe anche se trattasi di permessi differenti.

Esempio, data questa classe:

[FileIOPermission(SecurityAction.LinkDemand, Unrestricted=true)]
public class ClassA
{
    [EnvironmentPermission(SecurityAction.LinkDemand, Read="VAR1" )]
    public void Method1)
    {
    }
}

Il link demands a livello di metodo effettua l’override di quello a livello di classe, anche se si tratta di permessi differenti. In questo caso il link demands EnvironmentPermission sostituisce il link demands FileIOPermission, con la conseguenza che quest’ultimo permesso non viene richiesto per il metodo in questione.

Morale, occorre esplicitamente re-indicare i link demands a livello di classe su un metodo, se quest’ultimo è decorato già con un link demands.

Esempio corretto:

[FileIOPermission(SecurityAction.LinkDemand, Unrestricted=true)]
public class ClassA
{
   [FileIOPermission(SecurityAction.LinkDemand, Unrestricted=true)]
   [EnvironmentPermission(SecurityAction.LinkDemand, Read="VAR1" )]
   public void Method1)
   {
   }
}