36
我創建了一個基於角色的菜單,我遵循this教程。有些地方向下翻頁,你會看到這行代碼:asp.net身份獲取登錄用戶的所有角色
String[] roles = Roles.GetRolesForUser();
它返回當前登錄的用戶的所有角色。我想知道如何用新的ASP.NET Identity系統來實現這一點?
它還是很新的,沒有什麼可以找到它。
我創建了一個基於角色的菜單,我遵循this教程。有些地方向下翻頁,你會看到這行代碼:asp.net身份獲取登錄用戶的所有角色
String[] roles = Roles.GetRolesForUser();
它返回當前登錄的用戶的所有角色。我想知道如何用新的ASP.NET Identity系統來實現這一點?
它還是很新的,沒有什麼可以找到它。
Controller.User.Identity
是ClaimsIdentity
。您可以通過檢查的權利要求得到角色的列表...
var roles = ((ClaimsIdentity)User.Identity).Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value);
---更新---
打破下來一點更多...
using System.Security.Claims;
// ........
var userIdentity = (ClaimsIdentity)User.Identity;
var claims = userIdentity.Claims;
var roleClaimType = userIdentity.RoleClaimType;
var roles = claims.Where(c => c.Type == ClaimTypes.Role).ToList();
// or...
var roles = claims.Where(c => c.Type == roleClaimType).ToList();
這是上述解決方案的擴展方法。
public static List<string> Roles(this ClaimsIdentity identity)
{
return identity.Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value)
.ToList();
}
根據這個文檔http://msdn.microsoft.com/en-us/library/system.identitymodel.claims.claimtypes%28v=vs.110%29.aspx,沒有'Role'在'ClaimTypes'中。我需要添加它還是什麼? – Quoter
ASP.NET標識使用'System.Security.Claims.ClaimTypes' http://msdn.microsoft.com/en-us/library/system.security.claims.claimtypes(v=vs.110).aspx。此外,ClaimsIdentity對象還具有包含相同值的RoleClaimType屬性,您可以使用它。 –
你可以更新你的答案,告訴我在代碼中看起來如何?嘗試了幾種方法,但我沒有看到'RoleClaimType'。 – Quoter