用户.IsInRole总是返回真ASP.净的身份



我正在尝试通过仅为admin角色内的用户返回列表项来对_layourpartial文件进行基本定制

<ul class="nav navbar-nav navbar-right">
    @if (User.IsInRole("admin"))
    {
        <li>@Html.ActionLink("Dashboard", "Dashboard", "Home")</li>
    }
    <li>
        @Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Manage", "Account", routeValues: null, htmlAttributes: new { title = "Manage" })
    </li>
</ul>

问题是,当我从admin角色中删除用户时,user。IsInRole仍然返回true。

我试图删除cookies,注销/登录,重新启动iis express,…

没有工作!

在Identity中,当前用户角色存储为声明,User.IsInRole()检查应用的声明而不是实际角色。要从当前用户声明中删除角色,请执行以下操作:

var identity = (User.Identity as ClaimsIdentity);
var adminClaim = identity.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Role && c.Value == "admin");
if(adminClaim!=null)
    identity.RemoveClaim(adminClaim);

或者您可以通过以下代码检查当前用户的实际角色,而不是分配的声明:

HttpContext.Current.GetOwinContext()
    .GetUserManager<ApplicationUserManager>()
    .IsInRole(User.Identity.GetUserId(), "admin");

相关内容

  • 没有找到相关文章

最新更新