引导用户到正确的区域

时间:2019-04-30 22:16:55

标签: c# asp.net-mvc asp.net-core asp.net-identity asp.net-mvc-areas

用户登录时。我正在寻找一种方法,可以根据用户的身份角色将其路由到正确的区域。

我尝试过:

  • 您拥有可以重定向到该区域return RedirectToAction("Index", "Dashboard", new { area = "Admin" });的默认控制器, 但我有多个角色。
  • 在“启动配置”方法中添加重写选项。在一开始就可以使用,但是如果您有指向其他区域的链接-则无法使用。
  • 在默认控制器上,我创建了一个视图。添加了一些剃须刀@if (User.Identity.IsAuthenticated && User.IsInRole("Admin")) else if()。然后,在if语句之间使用<text><script>标签来调用将重定向用户的函数。它没有提供错误,只是没有起作用。我想不会,但是...尝试跳出框框思考

谢谢你的想法!

1 个答案:

答案 0 :(得分:1)

如果在控制器中使用asp.net核心标识,则可以直接使用var isInRole = User.IsInRole("Admin")来检查当前用户是否具有Admin角色。

或使用UserManager获取当前用户及其所有角色:

private readonly UserManager<IdentityUser> _userManager;
public HomeController(UserManager<IdentityUser> userManager)
{
    _userManager = userManager;
}

[Authorize(Roles = "Admin")]
public async Task<IActionResult> TestView()
{
    var user = await _userManager.GetUserAsync(HttpContext.User);

    var roles = await _userManager.GetRolesAsync(user);

    var matchingvalues = roles.SingleOrDefault(stringToCheck => stringToCheck.Equals("Admin"));
    if(matchingvalues != null)
    {
        return RedirectToAction("Index", "Dashboard", new { area = "Admin" });
    }

    return View();
}