CodeAccessPermission.PermitOnly 方法

定義

防止呼叫堆疊中較高的呼叫端,使用程式碼呼叫此方法來存取目前執行個體所指定之資源以外的所有資源。

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

實作

例外狀況

目前的框架已有作用中的 PermitOnly()

備註

重要

方法 PermitOnly 應該只用來保護資源不受完全信任程式碼意外存取。 它不應該用來保護資源,以防止不受信任的程式代碼刻意誤用。 例如,如果方法A發出許可權的 ,然後呼叫 方法B,方法B可以發出 Assert來覆寫 PermitOnlyPermitOnly 。 呼叫的方法在堆疊中一律較高。 因此,如果方法 B 嘗試存取受保護的資源,安全性系統就會開始檢查其許可權,因為方法 B 是立即呼叫者,然後逐步執行堆疊以確認堆疊中沒有 DenyPermitOnly 較低。 嘗試存取資源的方法 B,可以使用 方法立即 Assert 停止堆疊逐步解說。 在此情況下, PermitOnly 永遠不會探索呼叫方法) 方法 (堆疊上 A 放置的 。

PermitOnly 類似於 Deny,在這兩者都會導致堆疊逐步解說失敗,否則會失敗。 差異在於指定 Deny 會導致堆疊逐步解說失敗的許可權,但 PermitOnly 指定不會導致堆疊逐步解說失敗的唯一許可權。

呼叫這個方法,以確保您的程式代碼只能用來存取指定的資源。 呼叫 PermitOnly 的有效,直到呼叫程式代碼返回其呼叫端為止。 框架上只能有一個 PermitOnly 作用中。 試著在畫面上存在作用PermitOnly中時呼叫 PermitOnly ,會導致 SecurityException。 呼叫 RevertPermitOnlyRevertAll 以移除使用中的 PermitOnly

PermitOnly 會忽略未授與許可權的許可權,因為該許可權的需求將不會成功。 不過,如果呼叫堆疊上的程式代碼較低之後會呼叫該許可權,當堆疊逐步解Demand說到達嘗試呼叫 PermitOnly的程式代碼時,SecurityException會擲回 。 這是因為呼叫 PermitOnly 的程式代碼尚未被授與許可權,即使呼叫 PermitOnly 該許可權也一樣。 呼叫堆疊通常表示為向下成長,因此呼叫堆棧呼叫方法中的方法會降低呼叫堆疊。

給繼承者的注意事項

您無法覆寫這個方法。

適用於