独自のコード アクセス許可の作成
.NET Framework は、.NET Framework が公開するリソースを中心に、特定のリソースと操作をまとめて保護できるようにするための一連のコード アクセス許可クラスを提供します。 これらのアクセス許可クラスの簡単な説明については、「アクセス許可」を参照してください。詳細については、各アクセス許可クラスのドキュメントを参照してください。 ほとんどの場合は、組み込みのコード アクセス許可で十分です。 しかし、場合によっては、独自のコード アクセス許可を定義する必要があります。 ここでは、カスタムのコード アクセス許可クラスを定義する場合、その理由、および方法について説明します。
組み込みのアクセス許可クラスでは保護されないが、承認されていないコードから保護する必要のあるリソースにアクセスするコンポーネントまたはクラス ライブラリを定義する場合は、カスタムのコード アクセス許可クラスの作成を考慮する必要があります。 カスタム アクセス許可に対する宣言的な確認要求を実行できるようにするには、そのアクセス許可に対する属性クラスも定義する必要があります。 これらのクラスを用意し、クラス ライブラリ内からカスタム アクセス許可に対する確認要求を行うことにより、承認されないコードからは該当リソースにアクセスできないようにすることができ、さらに管理者がアクセス権を設定できるようになります。
この他にも、カスタム アクセス許可が適切である場合があります。 組み込みのコード アクセス許可クラスが、あるリソースを保護しているが、そのリソースへのアクセスを十分には制御していない場合には、カスタムのコード アクセス許可が必要になります。 たとえば、あるアプリケーションが社員レコードを使用しており、個々の従業員レコードは別個のファイルに保存されているような場合、それぞれの種類の従業員データについて、読み取りアクセスおよび書き込みアクセスを独立に制御できるようにします。 アプリケーション内部の管理ツールでは、各従業員ファイルの特定セクションを読み取ることはできても、変更することはできないようにしておきます。 実際には、一部のセクションについては、読み取ることさえもできないようにすることができます。
カスタムのコード アクセス許可は、組み込みのアクセス許可はあるが、リソースを適切に保護できるようには定義されていない場合にも役立ちます。 たとえば、メニューを作成できるような UI 機能があり、この機能を保護する必要があるけれども、組み込みの UIPermission クラスでは保護されていない場合があります。 このような場合は、カスタム アクセス許可を作成し、このメニューの作成機能を保護します。
アクセス許可は、できるだけ重複しないようにします。 1 つのリソースを保護するアクセス許可が複数存在すると、そのリソースに対するアクセス権を設定するたびに、重複するすべてのアクセス許可を適切に処理する必要が生じるため、管理者にとっては大きな問題となります。
カスタムのコード アクセス許可を実装するには、次に示す手順を実行します。一部の手順は省略できます。 各手順の説明については、対応するトピックを参照してください。
IPermission インターフェイスと IUnrestrictedPermission インターフェイスを実装します。
パフォーマンス上の理由から、または特別なデータ型をサポートするために必要な場合は、ISerializable インターフェイスを実装します。
XML のエンコーディングとデコーディングを処理します。
Attribute クラスを実装することにより、宣言セキュリティに対するサポートを追加します。
適切な場合には、カスタム アクセス許可を要求します。