将用户路由到正确的区域

问题描述 投票:0回答:1

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

我试过了:

  • 你有默认的控制器,你可以重定向到该区域return RedirectToAction("Index", "Dashboard", new { area = "Admin" });,但我有多个角色。
  • 在StartUp Configure方法中添加重写选项。哪个在开始时起作用,但是如果你有到另一个区域的链接 - 它不起作用。
  • 在默认控制器上,我创建了一个视图。添加了一些剃刀@if (User.Identity.IsAuthenticated && User.IsInRole("Admin")) else if()。然后在if语句之间使用<text>and <script>标记来调用将重定向用户的函数。它没有提供错误,只是没有工作。我认为它不会,但......试图跳出框框思考

感谢您的想法!

c# asp.net-mvc asp.net-core asp.net-identity asp.net-mvc-areas
1个回答
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.