PermitOnly メソッドの使用
PermitOnly の呼び出しによる効果は、基本的には Deny を呼び出した場合と同じですが、セキュリティ チェックを失敗させる条件の指定方法が異なります。 指定したリソースにアクセスできなくなる Deny の場合とは異なり、PermitOnly では指定したリソースにだけアクセスできるようになります。 したがって、アクセス許可 X に対して PermitOnly を呼び出すことは、アクセス許可 X 以外のすべてのアクセス許可に対して Deny を呼び出すことと同じです。 PermitOnly を呼び出す場合、指定したアクセス許可によって保護されているリソースにだけアクセスするためにコードを使用できます。 アクセスできないリソースを記述するよりもアクセスできるリソースを記述する方が効率的な場合には、Deny の代わりに PermitOnly を使用します。
メモ |
---|
.NET Framework Version 4 では、Deny、RequestMinimum、RequestOptional、および RequestRefuse の各アクセス許可要求を適用するためのランタイム サポートは削除されています。これらの要求は、.NET Framework 4 以降に基づくコードで使用しないでください。この変更およびその他の変更の詳細については、「.NET Framework 4 におけるセキュリティの変更点」を参照してください。 |
コード内でアクセス許可 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 メソッドを使用してセキュリティ チェックをオーバーライドするための強制構文の例を次のコードに示します。 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.
}
}