web-dev-qa-db-fra.com

Vérification du rôle d'utilisateur de connexion dans la page de rasoir

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

Ceci est ma mise en page si l'utilisateur est authentifié en tant qu'administrateur mais ce type de vérification ne semble pas bon, je dois vérifier le rôle de l'utilisateur et non son nom.

Voici la méthode du contrôleur

    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();
    }

Je trouve également que return View(user) n'est pas bon, car je ne sais pas comment utiliser ce user.

50
Asp Asp
@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>
}
107
Dave Alperovich

La réponse de Dave est correcte. Je vous suggère d'envisager d'utiliser une propriété sur votre modèle appelée IsAdministrator ou CanSeeSidebar et de traiter la réponse à cette question comme logique du domaine.

La vue ne doit fonctionner qu'avec le modèle. Regarder le fil, lire dans une base de données, sont les mêmes en ce qui concerne les réponses aux questions du domaine. Il faut répondre à tous ces types de questions avant que votre contrôleur ne remette le modèle à la vue.

13
Honorable Chow

Pour les pages ASP.NET Core Razor

if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))
9
Ozan BAYRAM