ASP.NET 身份 "Role-based" 声明

ASP.NET Identity "Role-based" Claims

我了解我可以使用声明对用户进行声明:

var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "Peter"));
claims.Add(new Claim(ClaimTypes.Email, "peter@domain.com"));

但是我应该如何存储 "role-based" 声明?例如:

The user is a super administrator.

claims.Add(new Claim("IsSuperAdmin, "true"));

值参数"true"感觉完全多余。否则如何使用声明来表达此声明?

您可以使用 ClaimType 存储角色 Role

claims.Add(new Claim(ClaimTypes.Role, "SuperAdmin"));

框架已经为您完成了。当用户登录时,所有用户角色都作为声明添加,声明类型为 ClaimTypes.Role,值为角色名称。

并且当您执行 IPrincipal.IsInRole("SuperAdmin") 时,框架实际上会检查用户是否存在类型 ClaimTypes.Role 和值 SuperAdmin 的声明。

所以不需要做任何特别的事情。只需将用户添加到角色即可。

您需要在类型为 ClaimsType.Role 的声明中指定角色,然后在 ClaimsIdentity 中指定包含该角色的声明类型,如下所示。

var claimsIdentity = new ClaimsIdentity(new[]
{
    new Claim(ClaimTypes.Email, "peter@domain.com"),
    new Claim(ClaimTypes.Name, "Peter"),
    new Claim(ClaimTypes.Role, "SuperAdmin"),
},
"ApplicationCookie", ClaimTypes.Email, ClaimTypes.Role);

这将允许您在控制器中使用 [Authorize(Roles = "SuperAdmin")] 属性。