【问题标题】:Route user to correct area将用户路由到正确的区域
【发布时间】:2019-04-30 22:16:54
【问题描述】:

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

我试过了:

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

提前感谢您的想法!

【问题讨论】:

  • 你有什么理由不只使用一些 if 语句(或 switch)来重定向到适当的区域吗?
  • @Ben 我可以,但我需要找到一种方法来获取当前用户的角色,因为[Authorize(Roles = "Admin")] 在方法中不起作用
  • ^ 这将有助于解决您的问题。它还解释了为什么您在登录后直接拨打 User.IsInRole 不起作用。您还可以将所有登录转发到辅助操作,然后 (a) 获取用户的角色并 (b) 使用 IF/Switch 分层钻取重定向到相关最终视图的角色。
  • @ShahzadHassan @scgough 感谢您的反馈。我在默认控制器上有一个[Authorize],我认为它会在授权之前显示视图。

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


【解决方案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();
}

【讨论】:

  • 谢谢!我没有想到这条路线(那是一天 15 小时)。我刚刚更改了 IdentityUser 模型以使用我的自定义模型(添加了其他属性)并且它可以工作。
猜你喜欢
  • 2018-06-24
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2016-12-26
  • 2018-08-06
  • 2021-04-14
相关资源
最近更新 更多