在razor页面中检查登录用户角色

Asp*_*Asp 51 c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

@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>
Run Code Online (Sandbox Code Playgroud)

这是我的布局,如果用户被认证为管理员,但这种检查看起来不好,我需要检查用户的角色而不是他的名字.

这是控制器方法

    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();
    }
Run Code Online (Sandbox Code Playgroud)

我也发现这return View(user)不好,因为我不知道如何使用它user.

Dav*_*ich 110

@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>
}
Run Code Online (Sandbox Code Playgroud)


Hon*_*how 13

戴夫的回答是正确的.我建议你考虑使用你的所谓的模型的属性IsAdministratorCanSeeSidebar和治疗在回答这个问题的领域逻辑.

视图应仅适用于模型.从数据库中读取线程,他们回答域问题是一样的.在您的控制器将模型移至视图之前,应回答所有这些类型的问题.

  • 如果您想将其放置在共享视图上,这不是很难-几乎可以肯定的使用导航? (2认同)

Oza*_*RAM 11

对于ASP.NET Core Razor Pages

if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))
Run Code Online (Sandbox Code Playgroud)