0

単一ページ アプリケーション スタイルの Web アプリケーションを開発しています。ユーザーの役割に基づいてメニューを作成したい。たとえば、管理者ユーザーには管理者メニューと html コンテンツを表示したい、一般ユーザーには別の html コンテンツを表示したい。Razor ビュー エンジンで asp.net mvc を使用しているため、次のように Razor コードで実現できます。

@if (@User.IsInRole("Admin"){
  -- html content for admin --
}else if (@User.IsInRole("General"){
  -- html content for general user --
}else{
  -- html content for the other users --
}

これは、以前は従来の方法で Web アプリケーションを開発していたときの典型的な方法でしたが、単一ページ アプリケーション スタイルの Web アプリケーションを開発するようになってからは、純粋な html コードを記述して、Razor や WebForm などのサーバー サイド ビュー エンジンを使用することを避けました。 asp.net または Velocity、Java EE の Jsp タグ ライブラリ。サーバーコードに依存しない、より独立したフロントエンドコードを書きたい。

とにかく、Razorの代わりにjavascriptとknockoutjsを使用する場合、上記のコードは次のように変更できます。

<!-- ko if: isAdmin -->
-- html content for admin --
<!-- /ko -->
<!-- ko if: isGeneralUser -->
-- html content for general user --
<!-- /ko -->
<!-- ko if: isOtherUser -->
-- html content for the other users --
<!-- /ko -->

isAdmin、isGeneralUser、および isOtherUser はビューモデルのプロパティであり、これらの値はユーザーのロールをチェックする ajax 呼び出しを介して設定されます。

私が疑問に思っているのは、ユーザーの役割に基づいてコンテンツを制御するこの種の方法が、セキュリティの観点から問題ないかどうかということですか?

ユーザーの役割によってビューが異なる場合、ビューのコンテンツをどのように処理しますか? 皆さんはこのような状況にどのように対処していますか。

4

1 に答える 1

0

テンプレートバインディングを使用します

<div data-bind="template: { name: template, data: model }"></div>

ビューモデルで、ユーザーの役割に応じて正しいテンプレートとモデルを設定します。また、役割固有のメソッドをサーバー側で保護する必要があります

ちょっとした余談ですが、私はコンベンションにバインドされたテンプレートの小さなフレームワークを作成しました。これはこのようなシナリオに最適です。まだ完了していないので、本番サイトで使用するのを待ちますが、今後数週間で準備が整います

上記のテンプレート バインディングは、私のフレームワークでは次のようになります。

<div data-bind="coc: model"></div>

ViewModel の名前が AdminViewModel の場合、ライブラリは AdminView という名前のテンプレートを探します

少しフィドルhttp://jsfiddle.net/2Uvd5/1/

編集:あなたがしたいことのより正確な例をフォア http://jsfiddle.net/XaZxj/

于 2012-12-17T13:55:30.350 に答える