ドメイン層 を構築するパッケージで す。ドメイン層には United Front 2 の世界をオブジェクト指向によってモデル化したクラス群が配置されます。ドメ イン層はシステムの中核的なロジックが実装されます。

`org.unitedfront2.domain.accesscontrol` パッケージでは、ドメイン層の中でも特にア クセス制御に関するクラスが収録されています。 `AccessControl` インターフェースは、資源に対 するアクセス制御ロジックを実装するためのインターフェースです。アクセス制御の対象となる資源は `Resource` インターフェースを実装する必要があります。 資源に対して、アクセス制御クラスは汎用的に利用できます。例えば、次のコードはユーザからのアクセスに限定する ためのアクセス制御オブジェクトを生成し、永続化しています。このアクセス制御オブジェクトをどのように利用するかは 利用する側で決めます。

    AccessControl ac = domainFactory.prototype(UserOnly.class);
    ac.store();

アクセス制御タイプを変更して保存するためのコードは次のとおりです。

    AccessControl ac = ...
    ac.changeTo(OwnerOnly.class);
    ac.store();

ある資源に対し、あるユーザがアクセス可能かどうかを判定するアクセス制御ロジックの実行は次のようにして行いま す。アクセス可能な場合は何も起きませんが、アクセスが拒否された場合は `AccessDeniedException` が発 生します。

    Resource resource = ...
    User user = ...
    AccessControl ac = ...
    ac.access(resource, user);

アクセス制御をどのように利用するかは利用する側で決めることになります。一般的な構成図を次に示します。これは、 資源 `ConcreteResource` が読み取りアクセス制御メソッド `readAccess` と書き込みアクセス制御メソッド `writeAccess` の実装にアクセス制御クラスを利用している例で す。このような一般的な構成は `AbstractResource` などいくつかの支援クラスを継承することで実装を簡略化できます。

この資源に対し、あるユーザが参照アクセス可能かどうかを判定するにアクセス制御ロジックの実行は次のようになり ます。

    ContreteResource resource = ...
    User user = ...
    resource.readAccess(user);

このパッケージでは、アクセス制御クラスの実装を支援するクラスなども収録しています。役割別に分類したリストを示し ます。

### コア

アクセス制御の中核的な概念を表すインターフェースとクラスです。これらは外部パッケージから参照されます。

- `AccessControl`
- `AccessControls`
- `CopyrightedResource`
- `Resource`

### `Resource` の実装を支援するクラス

`Resource` の実装を支援するクラスです。`Resource` を新たに作成する際に 利用できます。

- `AbstractCopyrightedResource`
- `AbstractResource`

### `AccessControl` の実装を支援するクラス

`AccessControl` の実装を支援するクラスです。`AccessControl` を新た に作成する際に利用できます。`AccessControlProxy` は通常外部のアプリケーションが意識 する必要はありません。

- `AbstractAccessControl`
- `AccessControlProxy`