2016-04-18 18 views
0

私の_Layout.chtmlでは、ユーザーロールに基づいてナビゲーションバーにメニューを表示します。それを短くするために、私は "管理者"と "ユーザー"の役割を持っています。ここに私のコードは_Layout.htmlUser.IsInRoleはAdminで、他のユーザーはfalseです

<div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 

       @if (User.IsInRole("Admin")) 
     { 
        <li class="dropdown"> 
         <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Manage Users</a> 
         <ul class="dropdown-menu"> 
          <li>@Html.ActionLink("User", "Index", "User")</li> 
         </ul> 
        </li> 
     } 
     else if (User.IsInRole("User")) 
        { 
        <li class="dropdown"> 
         <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">User</a> 
         <ul class="dropdown-menu"> 
          <li>@Html.ActionLink("User2", "Index2", "User2")</li> 
         </ul> 
        </li> 
     } 
       else 
       { 
       } 

      </ul> 
     </div> 

にある問題は、私は、「管理者」の役割を持つユーザーにログインしているとき、私は、メニューを見ることができる、です。しかし、私が "User"を使用してログインすると、何もありません。あたかも(User.IsInRole( "User"))が偽であるかのように。ユーザーは正常に認証されました(「パスワードが間違っています」という警告は表示されません)。これの原因は何でしょうか?

更新:これまで私が試したことは次のとおりです。 1.ユーザ(「ユーザ」ロールを持つ)ロールを「管理者」に変更すると、ユーザはメニューを見ることができます。 2.コードの配置を変更します( "User" ... Else "Admin"の場合、まだ "User"です)。ユーザーはメニューを見ることができません。

「管理者」ユーザーでログインすると、ホームページにリダイレクトされ、メニューが表示されます。私は、「ユーザー」のユーザーを使用してログインすると、私は「管理者」ユーザー、「User.Identity.IsAuthenticatedでログインすると、それは、そのまま、ログインページで、ユーザー名のテキストボックスに滞在ん パスワードテキストボックスの空白、および

一切警告します "本当です。 "User"では、Falseです。すべてのコントローラで

、私は無駄にこの... [承認(役割= "管理者、ユーザー")]

...すべてを追加しました。

+2

あなたは「ユーザー」ロールを持っていますか? – Balde

+0

完全に確実です。これまで私が試したことは次のとおりです。 1.ユーザーロールを「Admin」に変更します。ユーザーはメニューを表示できます。 2.コードの配置を変更してください( "User" ..... Else "Admin"の場合)、まだユーザーはメニューを見ることができません。 – Waller

+0

「Admin」ユーザーでログインすると、ホームページにリダイレクトされ、メニューが表示されます。 「ユーザー」ユーザーでログインすると、ログインページ、ユーザー名のテキストボックス、パスワードのテキストボックスの空白、および警告が表示されなくなります。 – Waller

答えて

0

ユーザーが正常にログインしている場合は、

はまず認証ユーザーのために利用可能な役割が何であるかを確認してください...これによると、私たちは、異なる角度で

@if (Request.IsAuthenticated) 
      { 
       string[] r = Roles.GetRolesForUser(); 
       string s = string.Join(",", r.ToList()); 
       <h1>@s</h1> 
} 
+0

私はこれらを持っています: 'System.NullReferenceException'型の例外はSystem.Web.dllで発生しましたが、ユーザーコードでは処理されませんでした – Waller

0

を確認することができます私の悪いです。 AccountControllerのログインメソッドが変更され、私はそれを忘れてしまった。

if ((UserManager.IsInRole(user.Id, "Admin")) || (UserManager.IsInRole(user.Id, "User"))) 
{ 
await SignInAsync(user, model.RememberMe); 
return RedirectToLocal(returnUrl); 
} 
関連する問題