@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
.
@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>
}
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.
Pour les pages ASP.NET Core Razor
if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))