加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何为登录用户添加和启用OWIN角色?

发布时间:2020-12-15 22:06:13 所属栏目:百科 来源:网络整理
导读:我正在使用带有OWIN身份验证的MVC 5.向已登录用户添加角色时,只有在用户重新登录后才会生效: [Authorize(Roles = "Role1")] public async TaskActionResult Action() { var currentUser = AuthenticationManager.User; var currentUserId = currentUser.Ide
我正在使用带有OWIN身份验证的MVC 5.向已登录用户添加角色时,只有在用户重新登录后才会生效:

[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投射到ClaimsPrincipal并将IIdentity转换为ClaimsIdentity.然后你可以添加声明.

ClaimsPrincipal currentPrincipal = (ClaimsPrincipal)this.User;
 ClaimsIdentity currentIdentity = (ClaimsIdentity)currentPrincipal.Identity;

 currentIdentity.AddClaim(new Claim(ClaimTypes.Role,"Role2"));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读