使用 PermitOnly 方法
呼叫 PermitOnly 本質上和呼叫 Deny 具有相同的效果,但在安全性檢查失敗時採取的措施則不同。 Deny 表示無法存取指定的資源,PermitOnly 則表示只可以存取您指定的資源。 因此,在使用權限 X 上呼叫 PermitOnly 和在使用權限 X 以外的所有使用權限上呼叫 Deny 是同樣的意義。 呼叫 PermitOnly 時,您的程式碼只可用來存取呼叫 PermitOnly 時所指定使用權限保護下的資源。 使用 PermitOnly 來描述可以存取的資源會比使用 Deny 來描述不可以存取的資源更方便。
注意事項 |
---|
在 .NET Framework 4 中,已經移除對強制 Deny、RequestMinimum、RequestOptional 和 RequestRefuse 使用權限要求的執行階段支援。在依據 .NET Framework 4 (含) 以後版本為基礎的程式碼上不可以使用這些要求。如需這項變更和其他變更的詳細資訊,請參閱 .NET Framework 中的安全性變更。 |
當您的程式碼在使用權限 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.
}
}