To use Role based menu you can make API call and get the user role. and then store the information in session or 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);
}
Method to Check User Role:
public bool IsUserInRole(string requiredRole)
{
var userRole = HttpContext.Session.GetString("UserRole");
return userRole != null && userRole.Equals(requiredRole, StringComparison.OrdinalIgnoreCase);
}
View:
@{
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>
Add the [Authorize(Roles = "Admin")] to securing Actions in Controllers.