我有一个 ASP.NET Core MVC 应用程序。我没有任何单独的数据库。它完全依赖于Rest API。对于登录,进行 API 调用并获取响应。该 json 响应角色也包含在内。我想根据这个角色显示/隐藏菜单。不要向所有用户显示所有菜单。仅显示给特定角色(如管理员、顾问等)。做这个的最好方式是什么?如何做到这一点?
提前致谢。
要使用基于角色的菜单,您可以进行 API 调用并获取用户角色。然后将信息存储在session或cookie中:
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var response = await _apiClient.AuthenticateUserAsync(model.Username, model.Password);
if (response.IsSuccess)
{
HttpContext.Session.SetString("UserRole", response.UserRole);
return RedirectToAction("Index", "Home");
}
}
return View(model);
}
查看用户角色的方法:
public bool IsUserInRole(string requiredRole)
{
var userRole = HttpContext.Session.GetString("UserRole");
return userRole != null && userRole.Equals(requiredRole, StringComparison.OrdinalIgnoreCase);
}
查看:
@{
bool isAdmin = IsUserInRole("Admin");
}
<div>
<ul>
<li><a href="/home/index">Home</a></li>
@if (isAdmin)
{
<li><a href="/admin/dashboard">Admin Dashboard</a></li>
}
<li><a href="/account/profile">Profile</a></li>
</ul>
</div>
将
[Authorize(Roles = "Admin")]
添加到保护控制器中的操作。