Per le richieste di collegamento dei tipi sono necessarie richieste di ereditarietà
Aggiornamento: novembre 2007
TypeName |
TypeLinkDemandsRequireInheritanceDemands |
CheckId |
CA2126 |
Categoria |
Microsoft.Security |
Breaking Change |
Breaking |
Causa
Un tipo pubblico unsealed è protetto con una richiesta di collegamento, dispone di un metodo sottoponibile a override e né il tipo né il metodo sono protetti da una richiesta di ereditarietà.
Descrizione della regola
Una richiesta di collegamento su un metodo o il relativo tipo dichiarante richiede che il chiamante immediato del metodo disponga dell'autorizzazione specifica. Una richiesta di ereditarietà su un metodo richiede che un metodo che esegue l'override abbia l'autorizzazione specifica. Una richiesta di ereditarietà su un tipo richiede che una classe derivante disponga dell'autorizzazione specifica.
Correzione di violazioni
Per correggere una violazione di questa regola, proteggere il tipo o il metodo con una richiesta di ereditarietà per la stessa autorizzazione della richiesta di collegamento.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito viene illustrato un tipo che viola la regola.
Imports System
Imports System.Security.Permissions
Namespace SecurityLibrary
<EnvironmentPermission(SecurityAction.LinkDemand, Read:="PATH")> _
Public Class TypesWithLinkDemands
Protected Overridable Sub UnsecuredMethod()
End Sub
<EnvironmentPermission(SecurityAction.InheritanceDemand, Read:="PATH")> _
Protected Overridable Sub SecuredMethod()
End Sub
End Class
End Namespace
using System;
using System.Security.Permissions;
namespace SecurityLibrary
{
[EnvironmentPermission(SecurityAction.LinkDemand, Read = "PATH")]
public class TypesWithLinkDemands
{
public virtual void UnsecuredMethod() {}
[EnvironmentPermission(SecurityAction.InheritanceDemand, Read = "PATH")]
public virtual void SecuredMethod() { }
}
}
using namespace System;
using namespace System::Security::Permissions;
namespace SecurityLibrary
{
[EnvironmentPermission(SecurityAction::LinkDemand, Read = "PATH")]
public ref class TypesWithLinkDemands
{
protected:
virtual void UnsecuredMethod() {}
[EnvironmentPermission(SecurityAction::InheritanceDemand,
Read = "PATH")]
virtual void SecuredMethod() {}
};
}
Regole correlate
Controllare la protezione dichiarativa sui tipi di valori
I tipi protetti non devono esporre campi
Non esporre in modo indiretto metodi con richieste di collegamento
Le richieste di collegamento negli override devono essere identiche a quelle nei metodi di base