2009-08-05 13 views
1

背景 各プロジェクトには1つのアカウントが関連付けられています。各ユーザーは、ゼロから複数のアカウントにアクセスする権限を持つことができます。これは、各ユーザーがユーザーのアカウント権限に基づいてプロジェクトのサブセットにのみアクセスできることを意味します。オブジェクトモデル認可 - オブジェクト指向設計の質問

ユーザーオブジェクトは、ユーザーがアプリケーションにサインインすると読み込まれ、アカウントのアクセス許可もその時点で読み込まれます。そのUserオブジェクトは、アプリケーションのキャッシュに格納されます。プロジェクトは必要に応じてロードされます。

質問 アカウントの制限を実施する最も良い方法は何ですか?実際のプレゼンテーションロジックから抽象化して欲しいと思っていますが、Userオブジェクトに依存するため、承認ロジックをProjectオブジェクトに入れるのは必ずしも良いアプローチではないと思います。皆さんはどう思いますか?

例:(ASPXページのコードの後ろ)

Project oProject = New Project(projectId); //Pass an Int32 here 
if (oProject.Load()) //This operation needs to check user permissions somehow 
{ /* Do stuff */ } 

答えて

1

次に抽象離れたユーザーオブジェクトも。ユーザーオブジェクトを、プロジェクトの標準インターフェイスを使用して照会できるアクセス許可のコレクションに変換します。

+0

それでは、ユーザーオブジェクトをプロジェクトオブジェクトに渡しますか? –

+1

インターフェイスを介して間接的にこのソリューションでは、プロジェクトとユーザーがこのインターフェイスについて知っているという事実を回避することはできませんが、プロジェクトはユーザーまたはTestHarnessなどと話しているかどうかを知る必要はありません。 – DanDan

1

権限の検証を担当するクラスを実装することができます(つまり、権限チェックロジックはプロジェクトの外に置かれます)。例えばJavaの場合:

コードでは、結果をプレゼンテーションレイヤーに戻す前に、ビジネスレイヤーでcheckProjectPermissionを呼び出すだけで済みます。これはかなり手続き的な(つまり非OO)アプローチですが、すべての権限ベースのロジックが1つのクラスに含まれているので、従うことは明らかです。例外ベースのアプローチでは、コード内のif-thenステートメントも少なくなります。

+0

複数のプロジェクトをロードするページがあり、あるページではユーザーにプロジェクトの読み込み権限が与えられますが、別のユーザーにはプロジェクトの読み込み権限が与えられてはいけませんか? –

関連する問題