2011-01-12 7 views
1

現在、私たちのコードでは、Webアプリケーションにログインしている特定のユーザーのロールとアクセス権にアクセスするためのクラスが用意されています。これはうまく構築され、うまく動作します。ただし、特定のページ(ビュー全体)を特定の権限に制限する機能だけでなく、それらのビューの特定のフィールドも制限することができます。したがって、ビューを表示する機能があるかもしれませんが、そのページの特定のフィールドを表示する権限しかない場合もあります。私はビューフィールドでユーザー権限を行っている方法を設計する方法を改善する

ほとんどのフィールドは、HTMLヘルパーを使用してASP.NET/C#で生成します。例えば、ここで私たちは権限に応じて/ショーをブロックする必要があるものです:

<%= Html.CheckBoxFor(m => m.Current, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%> 

私が最初に考えたのはちょうどその前に同様の組み込みC#コードでアクセス権のチェックを再生し、中にHTMLヘルパーを入れていました"if"文であるため、ユーザが許可を得ている場合にのみレンダリングされます。私は、フロントエンドが私の心の中でこれらのステートメントすべてで非常に肥大化しているのを見て、それを行うより良い方法があるかもしれないと思ったときに、自分自身をもう一度推測しました。

皆さんお勧めしますか?ありがとう。

答えて

2

モデルの個別のモジュールとしてユーザーのアクセス許可を持ちます。表示/非表示にするコードブロックを含む部分ビューを作成します。モジュールをパーシャルビューに渡して、ビューに何を表示するかのロジックを保持させます。

これは、一部の基本的なifまたはswitchと、それをより明確で管理しやすいようにマークアップして、部分的なビューで1つの論理ブロックを作成できることを意味します。

たとえば、すべてのページモデルが継承するアクセス許可モデルを作成し、すべてのページに同じアクセス許可を渡すことができるようにします。あなたは、ビューを呼び出し、このようなモデルにそれを渡すことができます:

<%Html.RenderPartial("Widgets/NavigationUserControl"); %>

これは、ユーザーのナビゲーションのためのマークアップとロジックを保持します。この部分図の中にあなたはそれがあなたの権限オブジェクトを継承する必要があるだろう:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WebApp.Web.Models.Permissions>" %>

をそしてあなたがマークアップであなたのより基本的なロジックを行うことができ、または単調でつらい仕事をHTMLヘルパーを持っているし、いくつか列挙型を返します/決定のためのより基本的なコードのためのプロパティ。例えば;

<% 
if (Model.User.IsAdmin) 
{ 
%> 
...html... 
<% 
} 
else 
{ 
%> 
...html... 
<% 
} 
%> 
+0

興味深いと思いました。私はこれを調べます。他のアイデアは誰ですか? – slandau

+0

これにより、追加のパーミッションプロパティを簡単に追加でき、部分ビューに対しても同様の変更を加えることができます。おそらく、より複雑な部分的なビューをもう一度伝えることによって、それを再び抽象化することもできます。しかし、それは部分的な見方が一番下になります。 – Refugee

+0

私はこのアイデアが気に入っています。 – slandau

2

私が最初に考えたのはちょうどその前に同様の 埋め込まれたC#コードでアクセス権のため チェックを演奏することだったと は、「もし」 文でHTMLヘルパーを置くので、場合にのみレンダリングされます ユーザーに許可がありました。私は の最後が非常に肥大化しているのを目の当たりにして自分自身を推測しました これらの記述は私の心の中で は にする方が良いかもしれないと思いました。

のHTMLヘルパー内部ifを入れて、あなたは条件付きチェックを実行するために必要なものデータヘルパー関数に渡します。

ビュー:

<body> 
    <p>text</p> 
    <%: Html.PermissionControlledFieldOne(someUserData, otherData) %> 

ヘルパー:

public HtmlString PermissionControlledFieldOne(....) { 
    if (performSecurityCheck(someUserData, otherData)) { 
    // .. render partial or build html or whatever you need 
    } 
関連する問題