2011-01-10 24 views
3

インデックスビュー内の一部のテーブルでは、一部のロールで他のテーブルよりも多くのテーブルを見ることができます。MVCのロールに基づいてテーブル内のカラムを非表示

だからこれは私が私のようなこの迅速かつ汚いやった

いくつかの列を非表示にする意味:に正しい方法を何であるか

<% bool codesZichtbaar = Roles.IsUserInRole("Admin") || Roles.IsUserInRole("Algemeen Beheer") || Roles.IsUserInRole("Secretariaat"); %> 


<table> 
    <tr> 
     <th> 
     </th> 
     <th> 
      Adres 
     </th> 
     <th> 
      Instellingsnr. 
     </th> 
     <% if (codesZichtbaar) { %> 
     <th> 
      Codes 
     </th> 
     <%} %> 
     <th> 
      IKON 
     </th> 
     <th> 
      Datum Van-Tot 
     </th> 
     <th> 
     </th> 
    </tr> 
    <% foreach (var item in Model) { %> 
    <tr class="inst<%: item.actieveSchool?"active":"inactive" %>"> 
     <td> 
      <% Html.RenderPartial("buttons", new MVC2_NASTEST.Models.ButtonDetail() { RouteValues = new { id = item.Inst_ID }, edit = false, details = true, delete = false, takeOptionalsFromUrl = true }); %> 
     </td> 
     <td> 
      <%: item.INST_NAAM%><br /> 
      <%: item.STRAAT%><br /> 
      <%: item.POSTCODE%> 
      <%: item.GEMEENTE%> 
     </td> 
     <td> 
      <%: item.DOSSNR%> 
     </td> 
     <% if (codesZichtbaar) { %> 
     <td> 
      Gebruiker: 
      <%: item.Inst_Gebruikersnaam%><br /> 
      C: 
      <%: item.Inst_Concode%><br /> 
      D: 
      <%: item.Inst_DirCode%> 
     </td> 
     <%} %> 
     <td> 
      T: 
      <%: item.INST_TYPE%><br /> 
      Inst_REF: 
      <%: item.INST_REF%><br /> 
      Loc_REF: 
      <%: item.INST_LOC_REF%><br /> 
      Loc_Nr: 
      <%: item.INST_LOCNR%> 
     </td> 
     <td> 
      <%: String.Format("{0:d}", item.DATUM_VAN)%> 
      - 
      <%: String.Format("{0:d}", item.DATUM_TOT)%> 
     </td> 
     <td> 
      <a href='<%= Url.Action("Links", "Instelling", MVC2_NASTEST.RouteValues.MergeRouteValues(MVC2_NASTEST.RouteValues.optionalParamters(Request.QueryString), new {id=item.Inst_ID})) %>' 
       title="Linken"> 
       <img src="<%= Url.Content("~/img/link.png") %>" alt="Link" width="16" /></a> 
     </td> 
    </tr> 
    <% } %> 
</table> 

が、これは私のコードが乾燥している、MVCあり、これを行う?または、これを行うためのよりクリーンな方法です。

答えて

4

私はこれのためにHTMLヘルパーを書いています。

public bool IsInRole(this HtmlHelper instance, params string[] roles) 
{ 
    var user = html.ViewContext.HttpContext.User; 
    foreach(var role in roles) 
    { 
     if(user.IsInRole(role)) 
      return true; 
    } 

    return false; 
} 

この関数は、ユーザーが指定されたいずれかの役割にある場合にtrueを返します。

<tr> 
    <td>First - Visible to all</td> 
    <% if(Html.IsInRole("Admin", "Algemeen Beheer", "Secretariaat")) { %> 
     <td>Only for privileged users</td> 
    <% } %> 
    <td>Last - Visible to all 
</tr> 

これは軽快でクリーンで再利用可能な方法です。

+0

私はいつもhtmlを返すメソッドとしてHTMLヘルパを考えました。これは非常に良いと再利用可能な:)完璧な:) – Stefanvds

+0

私は何を考えるようになった:どのようなパフォーマンスについては?私は役割を一度呼び、すべての行をforeachし、ブールをチェックする。あなたのコードでは、すべての行のために何度も何度もロールをチェックします:) – Stefanvds

関連する問題