如何为登录用户添加和启用OWIN角色
本文关键字:启用 OWIN 角色 添加 用户 登录 | 更新日期: 2023-09-27 18:13:41
我使用MVC 5与OWIN身份验证。当向已登录的用户添加角色时,直到用户重新登录后才会生效:
[Authorize(Roles = "Role1")]
public async Task<ActionResult> Action()
{
var currentUser = AuthenticationManager.User;
var currentUserId = currentUser.Identity.GetUserId();
var result = await UserManager.AddToRoleAsync(currentUserId, "Role2"); //result confirms role added
return RedirectToAction("AnotherAction", "Controller");
}
// not accessible until relog
[Authorize(Roles = "Role2")]
public ActionResult AnotherAction()
{
return View();
}
如何使角色变更立即生效?
我认为AddUserToRole方法在数据库级别执行分配。虽然这可能也需要发生,但您需要做的是刷新当前标识。
简短的回答:将IPrincipal转换为claimprincipal,并将IIdentity转换为ClaimsIdentity。然后你就可以加上索赔了。
ClaimsPrincipal currentPrincipal = (ClaimsPrincipal)this.User;
ClaimsIdentity currentIdentity = (ClaimsIdentity)currentPrincipal.Identity;
currentIdentity.AddClaim(new Claim(ClaimTypes.Role, "Role2"));