2011-10-04 2 views
1

私はこの質問をどこに置くかわからない、小売業者、製造業者、および顧客サポート(小売業者および製造業者がアクセスできるすべての情報にアクセスすることができる)である。次に、「製品リストを表示」と呼ばれるアクションメソッドを持つ製品コントローラがあるとしましょう。今では小売業者は自分のウェブサイト上の製品しか見ることができず、メーカーも可能であるが、顧客サポートは製造業者および小売業者のリストを閲覧し、どの製品を閲覧したいかを選択することができる。このコードがすべて同じアクションメソッド "製品リストを見る"にあるとします。今これは良い習慣ですか? 3種類のユーザーのすべてのコードを同じアクション方法で使用するには? 2番目に、ログインシステムとロールで構築されたmvcを使用していると仮定して、ユーザーのタイプに基づいてアクションメソッド内でどのコードを実行する必要があるかを判断します。どのようなタイプのユーザーがコントローラ - mvcのアクションメソッドコードにアクセスしているかを調べるにはどうすればいいですか?C#

答えて

0

(1)1つのアクションメソッドでこれを使用しても問題ありません。新しいロールが追加された場合、新しいアクションメソッドを作成したくないです。

(2)

If User.IsInRole("CustomerSupport") { ... } 

また、メソッド内の役割のみがアクセスできるようにアクションメソッドをロックダウンすることも考えてください。これを達成するには、[Authorize]属性を使用します。例えば。

[Authorize(Roles = "Retailer, Manufacturer, CustomerSupport")] 
0

私の考えでは、3つのタイプのユーザーすべてに対して同じ操作を行っても問題ありません。あなたが望むものを達成するにはいくつかの方法があります。例えば、依存性注入を見てください。リポジトリメソッド(データを呼び出す責任を負う)を型ごとに異なるものにしたいとします(ファクトリパターンを使用して、さまざまなタイプのユーザーに異なるリポジトリクラスを生成し、それをデータを取得するクラスに注入することができます)。

0

あなたの行動はアクセスポイントです。あなたはそれぞれの役割に対して異なる行動を取るべきではありません。あなたは30の役割を持っているとどうなりますか?あなたは30の行動を取るでしょうか?

コントローラはアクセスポイントだけなので、ユーザーはURLにナビゲートし、適切なアクションメソッドにルーティングされ、ユーザーは適切なビジネスロジックにユーザーを誘導する必要があります。行動を起こすことが許可されているかどうかを判断する必要があるのは、ビジネスロジックです。 MVCはあなたのプレゼンテーションだけですので、近い将来に別のプレゼンテーションレイヤーを使用する可能性はありますか?

関連する問題