如何为登录用户添加和启用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();
    }

如何使角色变更立即生效?

如何为登录用户添加和启用OWIN角色

我认为AddUserToRole方法在数据库级别执行分配。虽然这可能也需要发生,但您需要做的是刷新当前标识。

简短的回答:将IPrincipal转换为claimprincipal,并将IIdentity转换为ClaimsIdentity。然后你就可以加上索赔了。

 ClaimsPrincipal currentPrincipal = (ClaimsPrincipal)this.User;
 ClaimsIdentity currentIdentity = (ClaimsIdentity)currentPrincipal.Identity;
 currentIdentity.AddClaim(new Claim(ClaimTypes.Role, "Role2"));