2013-02-19 15 views
39
@if (Request.IsAuthenticated && User.Identity.Name=="administrator") 
{ 
    <div id="sidebar"> 
     <div class="module"> 
     <ul class="menu"> 
          <li>@Html.ActionLink("Home", "Index", "Home")</li> 
          <li>@Html.ActionLink("About", "About", "Home")</li> 
          <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
         </ul> 
     </div> 
     <div class="mainContent"> 
      Hello, @User.Identity.Name ! 
     </div> 
    </div> 

ユーザーが管理者として認証されているが、この種のチェックがうまく行かない場合はレイアウトします。自分の名前ではなくユーザーの役割を確認する必要があります。ここで剃刀ページのログインユーザーロールを確認する

はのcontroler方法

public ActionResult AuthenticatedUserLayout(string username) 
    { 
     var lst=userContext.UserProfiles.ToList(); 
     var user = lst.Select(u => u.UserName == username); 

     if(IsAdmin(Session["LoginUser"].ToString())) return View(user); else return Index(); 
    } 

である私も、私はそのuserのいずれかを使用するようにする方法を知らないのでreturn View(user)は、良くないことがわかります。

+2

'@if(Request.IsAuthenticated && User.IsInRole(" administrator "))' – codingbiz

答えて

89
@if (Request.IsAuthenticated && User.IsInRole("Administrators")) 
{ 
    <div id="sidebar"> 
     <div class="module"> 
      <ul class="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("About", "About", "Home")</li> 
       <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
      </ul> 
     </div> 
     <div class="mainContent"> 
      Hello, @User.Identity.Name ! 
     </div> 
    </div> 
} 
12

デイブの答えは正しいです。あなたのモデル上でIsAdministratorまたはCanSeeSidebarというプロパティを使用し、その質問にドメインロジックと回答することを検討することをお勧めします。

ビューはモデルでのみ機能します。スレッドを見て、データベースから読むと、彼らはドメインの質問に答える点で同じです。コントローラーがモデルをビューに表示する前に、これらのタイプの質問にすべて回答する必要があります。

+0

これを共有ビューに配置したい場合はそれほど難しくありません。 – niico

関連する問題