Esta documentación está archivada y no tiene mantenimiento.

CodeAccessPermission.PermitOnly (Método)

Actualización: Julio de 2008

Evita que los llamadores situados en la parte superior de la pila de llamadas utilicen el código que llama a este método para obtener acceso a todos los recursos con la excepción del recurso especificado por la instancia actual.

Espacio de nombres:  System.Security
Ensamblado:  mscorlib (en mscorlib.dll)

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

Implementaciones

IStackWalk.PermitOnly()

ExcepciónCondición
SecurityException

Ya hay un método PermitOnly activo para el marco actual.

a3z81ks0.alert_caution(es-es,VS.90).gifNota importante:

El método PermitOnly solo debe usarse para proteger los recursos frente a un acceso accidental por parte del código de plena confianza. No debe usarse para proteger los recursos frente a un uso incorrecto intencionado por parte de código que no es de confianza. Por ejemplo, si el método A emite PermitOnly para un permiso y, a continuación, llama al método B, el método B puede invalidar abiertamente PermitOnly emitiendo Assert. El método al que se llama siempre está situado en la parte superior de la pila. Por lo tanto, si el método B intenta obtener acceso a un recurso protegido, el sistema de seguridad iniciará una comprobación de permisos con él puesto que el método B es el llamador inmediato y, a continuación, se desplazará hacia abajo en la pila para confirmar que no haya ningún Deny o PermitOnly situado por debajo en la pila. El método B, que está intentando obtener acceso al recurso, puede detener inmediatamente el recorrido de pila utilizando el método Assert. En ese caso, el PermitOnly que el método A (el método de llamada) colocó en la pila no se detectará nunca.

PermitOnly es similar a Deny, ya que ambos originan un error en los recorridos de pila cuando, en cualquier otro caso, se realizarían correctamente. La diferencia consiste en que Deny especifica los permisos que originan un error en el recorrido por la pila, mientras que PermitOnly especifica los permisos que no originan un error en el recorrido por la pila.

Llame a este método para garantizar que el código puede utilizarse para obtener sólo acceso a los recursos especificados. La llamada a PermitOnly es eficaz hasta que el código de llamada vuelve al llamador. Sólo puede haber un método PermitOnly activo en cada marco. Un intento de llamar a PermitOnly cuando hay otro método PermitOnly activo en el marco da como resultado SecurityException. Se llama a RevertPermitOnly o a RevertAll para quitar un método PermitOnly activo.

Se omite el método PermitOnly para un permiso no concedido, ya que no se realizará correctamente ninguna demanda para ese permiso. No obstante, si hay código situado en la parte inferior de la pila de llamadas que llame a Demand para ese permiso, se produce una excepción SecurityException cuando el recorrido por la pila alcanza el código que intentó llamar a PermitOnly. Esto es debido a que el código que llamó a PermitOnly no dispone del permiso, aunque haya llamado a PermitOnly para dicho permiso. La pila de llamadas suele representarse de forma decreciente, por lo que los métodos que se encuentran en las posiciones superiores de la pila de llamadas, llaman a métodos de las posiciones inferiores.

Notas para los herederos:

No se puede reemplazar este método.

El ejemplo de código siguiente muestra el uso del método PermitOnly para limitar el acceso a todos los recursos excepto para el recurso especificado por la instancia actual. Este ejemplo de código forma parte de un ejemplo más extenso referente a la clase 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 y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

Fecha

Historial

Motivo

Julio de 2008

Se ha agregado una nota importante sobre el uso recomendado de este método.

Comentarios de los clientes.

Mostrar: