2017-07-03 27 views
1

ViewModelのコンセプト、特にコントローラの機能をViewModelの縮小されたフィールドセットに制限したいセキュリティ問題(通常はUserモデルViewModelにはパスワードとロールに関する情報はありません)。MVC ASP.NETで複雑なViewModelを作成する方法

異なるモデルから派生したViewModelを、どのように正しく実装するか(セキュリティの考え方など)ここで問題に

enter image description here

を描いている画像は、私はモデル自身から直接「サブのviewmodels」から派生するのではなく優れていることを、想像できます。これを行うにはベストプラクティスの方法がありますか?

+2

継承は良くないと思いますが、 – kogoia

答えて

1

ビューモデルの全目的は、ビューに必要な正確なデータをモデル化することです。実際にはセキュリティ上の問題ではありません。以前に見たことのないようなレベルで、あなたが間違っているのと同じように、パスワードや物などをビューモデルに保存するのであれば。 MvcフレームワークのViewModelsの主な目的は、複数のモデルと追加のプロパティをパックしてアンパックすることで、消防署から飲み込んだような印象を与えることなく、完了する必要のあるターゲットアクションをユーザーが完了できるようにすることです。完全なモデルを渡す必要はないが、ビューモデルに何かが含まれていても、そのプロパティに対してHTMLを積極的に出力する必要があるわけではないので、セキュリティにはいくつかの観点があると思います。これらのアクションのほとんどは、サーバー側で行われます。またはHTMLを生成するかみそりチェックで発生する必要があります。

セキュリティとコントローラについて過度に関心がある場合は、とにかく3層アーキテクチャを検討する必要があります。

+0

の代わりにオブジェクトコンポジションを使用する方が良いでしょう。つまり、私はviewmodelにパスワードを入れたくないということです。問題は、繊細な情報を持つ2つのモデルを組み合わせると、その間にビューモデルを使用するかどうかということでした。 – rst

+0

これを行うと何が得られるでしょうか?これを単純化しましょう。たとえば、ID、ユーザー名、パスワード、DOB、ニックネームを含むユーザーモデルがあるとします。 id、userid(ユーザーモデルへの参照)、favoriteIceCreamFlavor、SSN(例であるため)を含むuserPreferenceという2番目のモデルもあります。ユーザーがアイスクリームの味とニックネームを更新できる画面が必要なので、ユーザーID、ニックネーム、favoriteIceCreamFlavorを含む新しいビューモデルを作成します。更新するターゲット・フィールドにアクセスできます。また、ユーザーIDを使用してすべての更新データを参照することもできます。 –

+0

これをさらに進めて、社会的に '123'で始まるユーザーだけが自分の好きなアイスクリームの味を更新できるとしましょう。 SSNをヌル可能な型としてビューモデルに追加します。あなたのビューに剃刀の構文を使用すると、if文を書いて、ssnが123で始まる場合にのみアイスクリームのエディタを表示します。これはすべてhtmlが生成されてレスポンスとして送信されるときに起こるサーバ側であり、SSNのトレースはまったくありませんページ上のどこにでも、セッション内で、どこにでも。どこかのクライアント側に渡される変数や要素に設定していないため、ユーザーはデータを取得できません。 –

0

は、以下を参照してください。

ViewModels in MVC/MVVM/Seperation of layers- best practices?

ViewModelがあるだけでほとんどの時間という。ユーザーが表示できるものは何ですか。一般に、ViewModelは一連のページで再利用されますが、1つまたは2つに制限される可能性があります。

私は何度も、各ページのViewModelを継承したプロジェクトを継承しています。必ずしもあなたの複雑なモデルと一致する必要はありません。さまざまな理由でビューに渡したくない情報が多数あります。

ViewModel/ViewModelの各カスタムViewModelに共通の基本的な機能を継承して継承しています。

関連する問題