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

4

3 回答 3

127
@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>
}
于 2013-02-19T22:57:21.093 回答
24

对于 ASP.NET Core Razor 页面

if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))
于 2018-09-19T07:29:17.717 回答
14

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

该视图应仅适用于模型。查看线程,从数据库中读取,在回答领域问题方面是相同的。在控制器将模型交给视图之前,所有这些类型的问题都应该得到回答。

于 2013-02-20T00:55:20.203 回答