将用户路由到正确的区域
Route user to correct area
当用户登录时。我正在寻找一种方法,根据用户在身份中的角色将用户路由到正确的区域。
我试过:
- 您拥有可以重定向到该区域的默认控制器
return RedirectToAction("Index", "Dashboard", new { area = "Admin" });
,
但我有多个角色。
- 在启动配置方法中添加重写选项。这在开始时有效,但如果你有一个 link 到另一个区域 - 它不起作用。
- 在默认控制器上我创建了一个视图。添加了一些剃须刀
@if (User.Identity.IsAuthenticated && User.IsInRole("Admin")) else if()
。然后在 if 语句之间使用 <text>
和 <script>
标记来调用将重定向用户的函数。它没有提供错误,只是没有工作。我认为不会,但是...尝试跳出框框思考
谢谢你的想法!
如果你使用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();
}
当用户登录时。我正在寻找一种方法,根据用户在身份中的角色将用户路由到正确的区域。
我试过:
- 您拥有可以重定向到该区域的默认控制器
return RedirectToAction("Index", "Dashboard", new { area = "Admin" });
, 但我有多个角色。 - 在启动配置方法中添加重写选项。这在开始时有效,但如果你有一个 link 到另一个区域 - 它不起作用。
- 在默认控制器上我创建了一个视图。添加了一些剃须刀
@if (User.Identity.IsAuthenticated && User.IsInRole("Admin")) else if()
。然后在 if 语句之间使用<text>
和<script>
标记来调用将重定向用户的函数。它没有提供错误,只是没有工作。我认为不会,但是...尝试跳出框框思考
谢谢你的想法!
如果你使用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();
}