私はいくつかのタブを含むページを持つサイトを持っていて、1つを選択すると、そのコンテンツはAJAX呼び出しを使用してサーバから取得されます。すべてのタブは別のコントローラを介してロードされます。たとえば、[製品]タブと[クライアント]タブがある[顧客]ページがあります。ASP.NET MVC 3のコントローラメソッドへのアクセスを制限する
サイトには、権限レベルの異なる種類のユーザーがあります。
私がしたいのは、コントローラを保護し、ログインしているユーザに許可がある場合にのみタブの内容を表示することです。したがって、許可のないユーザがコントローラのURLを入力すると、ログインページにリダイレクトする必要があります。 URLは次のようになります。
http://localhost/MyApp/Products/1
ここで、1は製品のデータベースIDです。
私はこれらの2つのソリューションを実装することができますが、それらのどれが最適ではない:
はChildOnlyAction属性を使用します。この属性を持つProductコントローラのアクションをマークし、RenderActionを使用してメインビューからタブをレンダリングします。しかし、それは、ページ上のすべてのタブをレンダリングする必要があることを意味します。これは、ユーザーがタブをクリックしたときにのみデータを読み込みたいので最適ではありません。
Productコントローラへのリクエストごとに、レコードのIDを使用してユーザーにアクセス権があるかどうかを確認するデータベースクエリを作成します。しかし、これはすべてのリクエストに対して追加のクエリを実行する必要があることを意味します。
もっと良いアプローチがあるのでしょうか。
+1リンクの例 – Romias