Compartir a través de


Utilizar el método PermitOnly

Actualización: noviembre 2007

Cuando se llama a PermitOnly se obtiene esencialmente el mismo efecto que cuando se llama a Deny, aunque es una manera distinta de especificar las condiciones en las que se pueden producir errores en la comprobación de seguridad. En lugar de indicar que no se puede obtener acceso a un recurso específico, tal como sucede con Deny, PermitOnly indica que sólo se puede obtener acceso a los recursos que se especifiquen. Por tanto, llamar a PermitOnly para el permiso X es igual que llamar a Deny para todos los permisos, excepto el permiso X. Si se llama a PermitOnly, el código puede utilizarse para obtener acceso únicamente a los recursos protegidos por los permisos especificados al llamar a PermitOnly. Se utiliza PermitOnly en lugar de Deny cuando es más conveniente describir los recursos a los que se puede obtener acceso en lugar de los recursos a los que no se puede obtener acceso.

Si el código llama a PermitOnly para el permiso P1 y, después, los llamadores indirectos solicitan el permiso P2, la llamada a PermitOnly influye en el resultado del recorrido de pila sólo si P1 y P2 son de tipos diferentes y si P2 no es un subconjunto de P1.

En los siguientes fragmentos de código se muestra una sintaxis declarativa para reemplazar las comprobaciones de seguridad con PermitOnly. Los llamadores no pueden utilizar este código para obtener acceso a los recursos protegidos, excepto los recursos de interfaz de usuario. .

Option Explicit
Option Strict
Imports System
Imports System.Security.Permissions
Public Class MyClass1
   Public Sub New()
   End Sub   
   <UIPermissionAttribute(SecurityAction.PermitOnly, Unrestricted := True)> Public Sub 
   ReadRegistry()
      'Access a UI resource.
   End Sub
End Class
using System;
using System.Security.Permissions;

public class MyClass
{
   public MyClass() {    
   }   
   
   [UIPermissionAttribute(SecurityAction.PermitOnly, Unrestricted=true)]
   public void ReadRegistry() { 
      //Access a UI resource.
   }  
}

En el siguiente ejemplo de código se muestra una sintaxis imperativa para reemplazar las comprobaciones de seguridad con el método PermitOnly. Se pasa al constructor UIPermission un objeto PermissionState que especifica los recursos de interfaz de usuario a los que se debe conceder acceso. Tras llamar al método PermitOnly, el código y todos los llamadores se pueden utilizar sólo para obtener acceso a los recursos de interfaz de usuario.

Option Explicit
Option Strict
Imports System
Imports System.Security.Permissions
Public Class MyClass1
   Public Sub New()
   End Sub
   Public Sub ReadRegistry()
      Dim MyPermission As New UIPermission(PermissionState.Unrestricted)
      MyPermission.PermitOnly()
      'Access a UI resource.
   End Sub 
End Class
using System;
using System.Security.Permissions;

public class MyClass {
   public MyClass() {    
   }   
   public void ReadRegistry() { 
      UIPermission MyPermission = new UIPermission(PermissionState.Unrestricted);
      MyPermission.PermitOnly();
      //Access a UI resource.
   }  
}

Vea también

Conceptos

Invalidar comprobaciones de seguridad

Referencia

Utilizar el método Deny

PermissionState

Otros recursos

Extender metadatos mediante atributos

Seguridad de acceso a código