2009-07-15 5 views
6

私は、懸念の分離を可能な限り強く保つために努力しているアプリケーションに取り組んでいます。われわれは、セキュリティの横断的関心事がいくつかの合併症を生み出すことを見出している。AOPとセキュリティをUI要素に適用する

しかし、これらは属性とアスペクト指向プログラミングを使用して緩和できるようです。

ドメインレイヤーのコードに側面を適用する限りはわかりますが、UIエレメントに適用する場合はどうすればよいですか?たとえば、ユーザーがその機能を実行する権限を持っていないときにボタンを表示したくない場合はどうすればよいですか?私たちのMVCアプリケーションで

、この時点で、我々は書く必要があるだろう(擬似コードは以下の):

<% if (user.CanSeeSomeData) { <%=Html.TextBox("MyTextBox") } %> 

しかし、我々は、可能な場合は、属性ラAOPとの表示を制御したいと思います。

アイデア?

また、役に立つと思われるサードパーティのオープンソースツールがある場合は、これらの提案を歓迎します。

答えて

1

私は、ビューに多量のプログラミングが含まれるべきではない、あるいは何もないと言っています。 Pが禁止されている場所でAOP(またはa la AOP)を使用するという考えはうまく見えません。

別の方法で設計しましょう。通常、ビューには基本的な処理を行うためのいくつかの制御キーワードがあります:条件とループ。よりインテリジェントで、コントローラの役割を混在させていると思います。

したがって、実際には単純なフラグである場合は、if (user.CanSeeSomeData)を入力してください。それは、意見があるべき方法です。

モデルビューオブジェクト(ビューの情報を入れるコンテナ)を作成していたとき。あなたはAOPを使って、例えばそのプロパティの素敵な属性でその情報を初期化/設定することができました。

あなたが代わりに "IFS"

[UserCanSeeData] 
<%=Html.TextBox("MyTextBox") %> 

これはシンタックスシュガー、本物ではないAOPのように見えるの属性を求めることができます。 UserCanSeeDataがif(データベースアクセスのようにユーザ特権​​をチェックする)のようなものを持つべきだと言う試みは、コントローラコードをビューに移動しようとする試みです。

+0

応答のために感謝、graffic。したがって、属性のアプローチはOKですが、Conroller/ViewModelで行う必要がありますか、またはifステートメントを実行する方法であることを伝えていますか?[「ビューは必ず」] * – jlembke

+0

また、 ViewModelでこれをどのように達成しますか?プロパティに属性を付けることはできますが、フォームアイテムを表示/非表示/無効にすることはできません。あなたはコントロールを隠すことはしないで、ViewModel/Controllerのアクセス違反を処理するべきではないと言っていますか? – jlembke

関連する問題