2009-08-26 9 views
0

しばらく前に、アプリケーション(DMSシステム)になりすましを実装しました。これは、ユーザーがドキュメントページの物理ファイルにアクセスしないようにするためです。アプリケーションのいくつかの場所で最小限の変更を実装する必要がある場合は、最善のアプローチは何ですか?

ユーザーがアプリケーションにログインすると、特別なユーザーに偽装され、アプリケーション内で必要なファイルにアクセスできるようになります。

この偽装が計画されたとき、私たちは素晴らしいことではないと思っていました。ユーザーが一度偽装しても問題ありません。私たちは、コードが必要だった既存のメソッドにコードを実装しました(Impersonation = trueまたはImpersonation = falseのようなsthです)。

これは間違っていました。偽装はいくつかの場所で設定しなければなりません(たとえば、ユーザーが電子メールとしてドキュメントを送信する場合は、偽装をオフにしてユーザーのメールプロファイルを使用する必要があります)偽装の有無にかかわらずテストする新しい機能

私は実装する追加の機能があるので、私はクリーンなアプローチを得るためにこの動作を絶滅したいと思います。しかし、私は実際に何が最善のアプローチかもしれないという考えを持っていません。

私の頭に浮かぶ最初のことは状態パターンですが、これによって偽装が行われるすべてのクラスに対して偽装クラスと偽装されないクラスが生成されます。これにより、クラスの数が増加します。 他にもメソッドポインタがあります。偽装呼び出しを使用すると関数の偽装バージョンを使用し、そうでなければ偽装されていないバージョンの関数を呼び出します。 これはより多くの方法につながります。状態パターンアプローチよりも優れていますか?私はそうは思わない。

したがって、きれいなソリューションを得るにはどうすればよいでしょうか? (私はすでにスレッドの使用について考えましたが、これは非常に複雑です)

私を助けてくれることを願っています。

よろしく、

INNO横断面のような

答えて

0

サウンド - 多分アスペクト指向プログラミング?

0

もう1つのオプションは、ユーザーの偽装などの既定の動作を定義することです。このデフォルトの動作は、システムへのログイン時に発生します。ユーザーが電子メールとして文書を送信するなど、システム内で他の動作を実行すると、サービスがユーザーを引数として受け取り、その機能に必要な偽装を使用するサービスにカプセル化できます。あなたの例を挙げる:

var emailService = new emailService(); 

//inside the service call it would apply the impersonation necessary for the operation 
emailService.send(user, new Attachment(documentToSendViaEmail)); 
関連する問題