PermitOnly
PermitOnly の呼び出しによる効果は、基本的には Deny を呼び出した場合と同じですが、セキュリティ チェックを失敗させる条件の指定方法が異なります。指定したリソースにアクセスできなくなる Deny の場合とは異なり、PermitOnly では指定したリソースにだけアクセスできるようになります。そのため、アクセス許可 X に対して PermitOnly を呼び出すことは、アクセス許可 X 以外のすべてのアクセス許可に対して Deny を呼び出すことと同じになります。PermitOnly を呼び出すと、コードは PermitOnly を呼び出すときに指定したアクセス許可によって保護されているリソースにだけアクセスできます。アクセスできないリソースを記述するよりもアクセスできるリソースを記述する方が効率的な場合には、Deny の代わりに PermitOnly を使用します。
コード内でアクセス許可 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
[C#]
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
[C#]
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.
}
}
参照
属性を使用したメタデータの拡張 | セキュリティ チェックのオーバーライド | コード アクセス セキュリティ | CodeAccessPermission.Deny メソッド | PermissionState 列挙体