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

时间:2013-02-19 22:53:11

标签: 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>

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

这是控制方法

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

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

3 个答案:

答案 0 :(得分:105)

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

答案 1 :(得分:13)

戴夫的回答是正确的。我建议您考虑在名为IsAdministratorCanSeeSidebar的模型上使用属性,并将该问题视为域逻辑

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

答案 2 :(得分:9)

对于ASP.NET Core Razor页面

if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))