更新:2007 年 11 月
呼叫 PermitOnly 本質上和呼叫 Deny 具有相同的效果,但在安全性檢查失敗時採取的措施則不同。Deny 表示無法存取指定的資源,PermitOnly 則表示只可以存取您指定的資源。因此,在使用權限 X 上呼叫 PermitOnly 和在除使用權限 X 以外的所有使用權限上呼叫 Deny 是同樣的意義。當您呼叫 PermitOnly 時,您的程式碼只可用來存取當您呼叫 PermitOnly 所指定使用權限保護下的資源。使用 PermitOnly 來描述可以存取的資源會比使用 Deny 來描述不可以存取的資源更方便。
當您的程式碼在使用權限 P1 上呼叫 PermitOnly,而下層呼叫端要求使用權限 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 方法以覆寫安全性檢查的命令式語法。PermissionState 物件將會傳遞給 UIPermission 建構函式,以指定要授與存取權的使用者介面資源。在呼叫 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.
}
}