2016-04-18 10 views
0

In meinem _Layout.chtml möchte ich Menü auf der Navigationsleiste basierend auf der Benutzerrolle anzeigen. Um es kurz zu machen, habe ich die Rolle "Admin" und "Benutzer". Hier ist mein Code in der _Layout.htmlDie User.IsInRole funktioniert für Admin aber falsch für andere Benutzer

<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> 

Das Problem ist, wenn ich einen Benutzer mit „Admin“ Rolle anmelden, kann ich das Menü sehen. Aber wenn ich mich mit "User" anmelde, nichts. Als ob die (User.IsInRole ("User")) falsch ist. Benutzer hat sich erfolgreich authentifiziert (Es gibt keine Warnung "Falsches Passwort"). Was kann die Ursache dafür sein?

UPDATE: Hier ist, was ich bisher versucht habe. 1. Ändern Sie den Benutzer (mit Rolle "Benutzerrolle") zu "Admin", der Benutzer kann das Menü sehen. 2. Ändern Sie die Anordnung des Codes (wenn "Benutzer" ..... Else "Admin"), immer noch "Benutzer") Benutzer kann das Menü nicht sehen.

Wenn ich mich mit "Admin" -Benutzer anmelde, wird es auf die Homepage umgeleitet und das Menü erscheint. Wenn ich mit "User" Benutzer anmelden, wird es auf der Login-Seite, Benutzername Textbox intakt, Passwort Textbox leer und keine Warnung whatsoever

Als ich melde dich mit "Admin" user „, bleiben User.Identity.IsAuthenticated " ist wahr. Mit "Benutzer" ist es False.

In allen Controller habe ich diese hinzugefügt ... [autorisieren (Roles = "Admin User")]

... Alle ohne Erfolg.

+2

Sind Sie sicher, dass der Benutzer eine Rolle "Benutzer" hat? – Balde

+0

Ganz sicher. Folgendes habe ich bisher versucht. 1. Ändern Sie die Benutzerrolle in "Admin", der Benutzer kann das Menü sehen. 2. Ändern Sie die Anordnung des Codes (Wenn "Benutzer" ..... Else "Admin"), kann immer noch Benutzer das Menü nicht sehen. – Waller

+0

Wenn ich mich mit "Admin" -Benutzer anmelde, wird es auf die Homepage umgeleitet und das Menü erscheint. Wenn ich mich mit dem Benutzer "Benutzer" anmelde, bleibt er auf der Anmeldeseite, der Textbox für den Benutzernamen intakt, dem Passwort-Textfeld leer und ohne jegliche Warnung. – Waller

Antwort

0

Wenn der Benutzer erfolgreich angemeldet ist,

Prüfen Sie zuerst, was die verfügbaren Rollen für den sind authentifizierte Benutzer ... dies Gemäß wir in verschiedenen Winkeln

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

Ich habe diese: Eine Ausnahme vom Typ 'System.NullReferenceException' aufgetreten in System.Web.dll, wurde aber nicht im Benutzercode behandelt – Waller

0

Mein schlechtes überprüfen. Die Login-Methode in AccountController wurde geändert und ich habe es vergessen.

if ((UserManager.IsInRole(user.Id, "Admin")) || (UserManager.IsInRole(user.Id, "User"))) 
{ 
await SignInAsync(user, model.RememberMe); 
return RedirectToLocal(returnUrl); 
} 
Verwandte Themen