Seguridad declarativa utilizada con ámbito de clase y miembro
La seguridad declarativa se puede utilizar en clases, miembros y clases anidadas. En esta sección se describen las reglas utilizadas para evaluar la seguridad declarativa cuando se aplica a múltiples niveles de la misma clase.
Clases, miembros y seguridad declarativa
Cuando exista seguridad declarativa para la misma acción de seguridad tanto en el nivel de clase como en el nivel de método, la seguridad declarativa se aplicará conforme a la siguiente tabla.
Acción de seguridad | Comportamiento en las versiones 1.0 y 1.1 de .NET Framework | Comportamiento en la versión 2.0 de .NET Framework |
---|---|---|
Petición |
Los atributos de nivel de método reemplazan a los atributos de nivel de clase. (Si se coloca una petición declarativa en el nivel de método, se omitirá cualquier petición declarativa de nivel de clase.) |
Los atributos de nivel de método y los atributos de nivel de clase se unen en un único conjunto de permisos para ambos niveles. |
Petición de vínculo |
Los atributos de nivel de método y los atributos de nivel de clase se unen. |
Ningún cambio de comportamiento. |
Petición de herencia |
Los atributos de nivel de clase requieren el permiso especificado para poder derivar de la clase. Los atributos de nivel de método requieren el permiso especificado para poder reemplazar el método en una clase derivada. Como las peticiones de herencia tienen distintos significados para las clases y los métodos, las declaraciones pueden aplicarse a los niveles de clase y método por separado. |
Ningún cambio de comportamiento. |
Assert |
Los atributos de nivel de método reemplazan a los atributos de nivel de clase. |
Los atributos de nivel de método y los atributos de nivel de clase se unen en un único conjunto de permisos para ambos niveles. |
Deny |
Los atributos de nivel de método reemplazan a los atributos de nivel de clase. |
Los atributos de nivel de método y los atributos de nivel de clase se unen en un único conjunto de permisos para ambos niveles. |
Sólo con permisos |
Los atributos de nivel de método reemplazan a los atributos de nivel de clase. |
Los atributos de nivel de método y los atributos de nivel de clase se intersecan en un único conjunto de permisos para ambos niveles. |
Si las acciones de seguridad son diferentes (por ejemplo, una petición en el nivel de clase con una aserción en el nivel de método), no hay ninguna interacción en absoluto y se evalúan los dos niveles.
Clases anidadas y seguridad declarativa
Cuando se aplica la seguridad declarativa a las clases, no se propaga a ninguna clase anidada ni método de clases anidadas. A la inversa, cuando se aplica la seguridad declarativa a las clases anidadas o a métodos de una clase anidada, tampoco se propaga a las clases principales. La seguridad declarativa se debe aplicar a las clases anidadas como si fuesen clases separadas.
En el ejemplo siguiente se muestra un permiso hipotético exigido en el nivel de clase de una clase denominada Main
. Dentro de esa clase, se define una clase anidada denominada Nested
. En este ejemplo, la petición no se aplica a la clase anidada.
<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()
{
}
}
}