CodeAccessPermission.PermitOnly 方法

定义

防止调用堆栈中的调用方使用调用此方法的代码访问除当前实例指定的资源之外的所有资源。

public:
 virtual void PermitOnly();
public void PermitOnly();
abstract member PermitOnly : unit -> unit
override this.PermitOnly : unit -> unit
Public Sub PermitOnly ()

实现

例外

当前帧已 PermitOnly() 处于活动状态。

注解

Important

PermitOnly该方法应仅用于保护资源免受完全信任代码意外访问。 它不应用于防止资源被不受信任的代码故意滥用。 例如,如果方法A发出PermitOnly权限,然后调用方法B,则方法B可以通过发出一个PermitOnly来公开重写Assert该方法。 调用的方法在堆栈中始终较高。 因此,如果方法 B 尝试访问受保护的资源,则安全系统开始检查其权限,因为方法是 B 直接调用方,然后向下走堆栈以确认堆栈中没有 DenyPermitOnly 更低。 尝试访问资源的方法 B可以使用该方法 Assert 立即停止堆栈演练。 在这种情况下, PermitOnly 永远不会发现按方法(调用方法 A )放置在堆栈上。

PermitOnly 与此 Deny类似,在这两者中,当堆栈成功时,两者都会导致堆栈行走失败。 区别在于, Deny 指定会导致堆栈演练失败的权限,但 PermitOnly 指定不会导致堆栈演练失败的唯一权限。

调用此方法以确保代码可用于仅访问指定的资源。 调用生效 PermitOnly ,直到调用代码返回到其调用方。 帧上只能有一个 PermitOnly 活动。 当帧上存在活动PermitOnly时,尝试调用PermitOnly结果为 SecurityException. 调用或删除RevertPermitOnly活动RevertAllPermitOnly

PermitOnly 对于未授予的权限,将忽略 ,因为对该权限的需求不会成功。 但是,如果调用堆栈上的代码较低以后会调用Demand该权限,则当堆栈演练到达尝试调用SecurityException的代码时,将引发一个PermitOnly。 这是因为调用 PermitOnly 的代码尚未授予权限,即使它为该权限调用 PermitOnly 也是如此。 调用堆栈通常表示为向下增长,因此调用堆栈调用方法中的方法越低。

继承者说明

不能重写此方法。

适用于