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")]
属性。
我了解我可以使用声明对用户进行声明:
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")]
属性。