![](/img/trans.png)
[英]ASP.NET Core Web API - How to Select Records based on logged in user role using DB Identity
[英]In ASP.NET Core 2.1 how do I add menu items after the user has logged in based on Role?
我有一個Razor Web應用程序,其中定義了幾個自定義AspNetRoles。 我希望一個或多個菜單項僅在用戶登錄后才顯示,並且如果它們是我在PageModel類的Authorize標記中指定的Role的成員。 我在想可以使用單獨的版式,但無法正常使用。 還有其他想法嗎?
當前的_Layout.cshtml包含以下內容:
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a asp-page="/Index" class="navbar-brand">@Configuration["Agency:AgencyName"] Agency</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-page="/ClientManagement/Index">About</a></li>
<li><a asp-page="/About">About</a></li>
<li><a asp-page="/Contact">Contact</a></li>
</ul>
@await Html.PartialAsync("_LoginPartial")
</div>
</div>
</nav>
我只希望在具有特定角色的用戶登錄后出現ClientManagement / Index菜單項。
在對@await Html.PartialAsync(“ _ LoginPartial”)代碼的工作方式進行了一些研究之后,我找到了一種實現所需功能的方法。 在下面的代碼中,我首先通過_LoginPartial.cshtml文件驗證用戶是否已登錄。然后,檢查用戶是否具有特定角色。 如果用戶處於指定的角色中,則我發出該角色所需的標記。
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
<form asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
<ul class="nav navbar-nav navbar-right">
<li>
<a asp-page="/ScheduleManagement/Scheduling">Schedule Shifts</a>
</li>
@if (User.IsInRole("AgencyAdministrator"))
{
<li>
<a asp-page="/ClientManagement/Index">Client Management</a>
</li>
<li>
<a asp-page="/ProjectManagement/Index">Project Management</a>
</li>
<li>
<a asp-page="/ShiftEmployeeManagement/Index">Shift Employee Management</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Types Management<span class="caret"></span></a>
<ul class="dropdown-menu">
<li>
<a asp-page="/TypeManagement/AddressType/Index">Address Type Management</a>
</li>
<li>
<a asp-page="/TypeManagement/DomainTypes/Index">Domain Type Management</a>
</li>
<li>
<a asp-page="/TypeManagement/EmailType/Index">Email Type Management</a>
</li>
<li>
<a asp-page="/TypeManagement/SkillLevelType/Index">Skill Level Type Management</a>
</li>
<li>
<a asp-page="/TypeManagement/SkillType/Index">Skill Type Management</a>
</li>
</ul>
</li>
}
<li>
<a asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
</li>
<li>
<button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
</li>
</ul>
</form>
}
else
{
<ul class="nav navbar-nav">
<li><a asp-page="/About">About</a></li>
<li><a asp-page="/Contact">Contact</a></li>
</ul>
}
這確實顯示了DI的強大功能,因為我因此只能訪問SignInManager和UserManager。
無論如何,我敢肯定,還有其他方法可以完成我想要的工作,根據用戶或用戶角色顯示界面項,但這確實可行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.