我正在尝试通过仅为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");