@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
。
答案 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)
IsAdministrator
或CanSeeSidebar
的模型上使用属性,并将该问题视为域逻辑。
视图应仅适用于模型。从数据库中读取线程,他们回答域问题是相同的。在您的控制器将模型移到视图之前,应该回答所有这些类型的问题。
答案 2 :(得分:9)
对于ASP.NET Core Razor页面
if (User.Identity.IsAuthenticated && User.IsInRole("Administrator"))