我有一个应用程序,可以为用户分配以下角色:
一个用户可能已分配了两个或多个角色,例如。 SuperAdmin和用户。我的应用程序使用声明,因此我也希望通过声明来验证用户角色。喜欢:
[Authorize(Roles="Admin")]
不幸的是,我不知道如何为ClaimTypes.Role添加多个角色。我有以下代码:
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, name),
new Claim(ClaimTypes.Email, email),
new Claim(ClaimTypes.Role, "User", "Admin", "SuperAdmin")
},
"ApplicationCookie");
正如您所看到的,我试图为了说明而添加更多角色,但显然它是以错误的方式完成的,因此无法工作。 因此,非常感谢任何帮助。
答案 0 :(得分:38)
声明标识可以具有多个具有相同ClaimType的声明。这样就可以使用 HasClaim 方法检查是否存在特定的用户角色。
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, name),
new Claim(ClaimTypes.Email, email),
new Claim(ClaimTypes.Role, "User"),
new Claim(ClaimTypes.Role, "Admin"),
new Claim(ClaimTypes.Role,"SuperAdmin")
},
"ApplicationCookie");
答案 1 :(得分:3)
@Parameswar Rao讲得很好,但要有动态角色
例如,一个用户对象已经具有类型列表的属性角色,例如
然后使用localfunctions
ClaimsIdentity getClaimsIdentity()
{
return new ClaimsIdentity(
getClaims()
);
Claim[] getClaims()
{
List<Claim> claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, user.UserName));
foreach (var item in user.Roles)
{
claims.Add(new Claim(ClaimTypes.Role, item));
}
return claims.ToArray();
}
}
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = getClaimsIdentity()
}