如何为多个用户角色构建 .NET Core MVC 项目?
How to structure a .NET Core MVC project for multiple user roles?
假设您有多个用户角色(例如客户、员工、经理)并希望提供个性化体验(不同的主页、不同角色可访问的不同页面),最好的设置方式是什么使其可扩展?
目前我们正在考虑为不同的角色使用区域。
经理登录时将被引导至经理区主页,而客户将被引导至客户区主页。
是否有更好的结构方式?
通常我们通过网站导航menu/bar将用户重定向到不同的页面,如果您想根据用户的角色显示不同的页面,您可以动态render/display导航menu/bar 通过在用户登录站点后检查当前用户的角色。
@if (!SignInManager.IsSignedIn(User))
{
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">WebApp</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<partial name="_LoginPartial" />
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
}
else
{
if (User.IsInRole("manager"))
{
//navigation bar for manager
//html content here
//...
<a class="nav-link text-dark" asp-area="Manager" asp-controller="controller_name_here" asp-action="action_name_here">Admin Home</a>
}
else if (User.IsInRole("employee"))
{
//navigation bar for employee
}
else
{
//navigation bar for employee
}
Currently we are considering using areas for the different roles.
Areas 提供了一种将 ASP.NET 核心 Web 应用划分为更小功能组的方法。在您提到的场景下,将功能分组到客户、员工和经理单元中,这将使项目结构更加清晰。
假设您有多个用户角色(例如客户、员工、经理)并希望提供个性化体验(不同的主页、不同角色可访问的不同页面),最好的设置方式是什么使其可扩展?
目前我们正在考虑为不同的角色使用区域。
经理登录时将被引导至经理区主页,而客户将被引导至客户区主页。
是否有更好的结构方式?
通常我们通过网站导航menu/bar将用户重定向到不同的页面,如果您想根据用户的角色显示不同的页面,您可以动态render/display导航menu/bar 通过在用户登录站点后检查当前用户的角色。
@if (!SignInManager.IsSignedIn(User))
{
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">WebApp</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<partial name="_LoginPartial" />
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
}
else
{
if (User.IsInRole("manager"))
{
//navigation bar for manager
//html content here
//...
<a class="nav-link text-dark" asp-area="Manager" asp-controller="controller_name_here" asp-action="action_name_here">Admin Home</a>
}
else if (User.IsInRole("employee"))
{
//navigation bar for employee
}
else
{
//navigation bar for employee
}
Currently we are considering using areas for the different roles.
Areas 提供了一种将 ASP.NET 核心 Web 应用划分为更小功能组的方法。在您提到的场景下,将功能分组到客户、员工和经理单元中,这将使项目结构更加清晰。