ASP.NET标识“基于角色”的声明

时间:2015-02-09 13:18:20

标签: c# asp.net-web-api2 asp.net-identity claims-based-identity asp.net-authentication

我知道我可以使用声明来声明用户:

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

但我应该如何存储“基于角色”的声明?例如:

  

用户是超级管理员。

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

值参数“true”感觉完全多余。如何用声明来表达这种说法?

3 个答案:

答案 0 :(得分:24)

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

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

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

答案 1 :(得分:16)

您可以使用ClaimType Role

存储角色
claims.Add(new Claim(ClaimTypes.Role, "SuperAdmin"));

答案 2 :(得分:1)

您需要在声明中使用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")]属性。