Compartir a través de


Utilizar el método PermitOnly

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 en el permiso X es igual que llamar a Deny en todos los permisos excepto el permiso X. Si llama a PermitOnly, el código se puede usar para tener acceso solo a los recursos protegidos por los permisos que especifica 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.

NotaNota

En .NET Framework versión 4, se ha quitado la compatibilidad con el runtime para exigir las solicitudes de permisos Deny, RequestMinimum, RequestOptional y RequestRefuse.Estas solicitudes no deben usarse en código basado en .NET Framework 4 o versiones posteriores.Para obtener más información sobre estos y otros cambios, vea Cambios de seguridad en .NET Framework 4.

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

Referencia

Utilizar el método Deny

PermissionState

Conceptos

Extender metadatos mediante atributos

Invalidar comprobaciones de seguridad

Seguridad de acceso del código