使用 PermitOnly 方法

调用 PermitOnly 与调用 Deny 的效果基本相同,但前者是指定安全检查会在什么情况下失败的另一种方法。 与 Deny 不同,PermitOnly 不是指示不能访问指定的资源,而是指示只能访问您指定的资源。 因此,对权限 X 调用 PermitOnly 与对除权限 X 之外的所有权限调用 Deny。 如果调用 PermitOnly,则您的代码只能用来访问调用 PermitOnly 时指定的权限所保护的资源。 在描述可以访问的资源比描述不能访问的资源更为方便时,请使用 PermitOnly,而不要使用 Deny

注意注意

在 .NET Framework 4 版中,移除了对执行 DenyRequestMinimumRequestOptionalRequestRefuse 权限请求的运行时支持。不应在基于 .NET Framework 4 或更高版本的代码中使用这些请求。有关此更改和其他更改的更多信息,请参见 .NET Framework 4 中的安全性更改

如果您的代码对权限 P1 调用 PermitOnly,然后下游调用方使用 Demand 请求权限 P2,则只有 P1 和 P2 属于不同的类型,并且 P2 不是 P1 的子集时,PermitOnly 调用才会影响堆栈步的结果。

下面的代码段说明使用 PermitOnly 重写安全检查的声明式语法。 调用方不能使用此代码来访问除用户界面资源之外的任何受保护资源。 .

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.
   }  
}

下面的代码示例说明使用 PermitOnly 方法重写安全检查的强制性语法。 此示例会向 UIPermission 构造函数传递一个 PermissionState 对象,该对象指定要授予其访问权限的用户界面资源。 调用 PermitOnly 方法后,代码和所有调用方都只能用来访问用户界面资源。

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.
   }  
}

请参见

参考

使用 Deny 方法

PermissionState

概念

利用特性扩展元数据

重写安全检查

代码访问安全性