22

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

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”感觉完全多余。这个陈述还能如何使用声明来表达?

4

3 回答 3

33

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

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

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

于 2015-02-09T20:06:22.227 回答
18

您可以使用 ClaimType Role存储角色

claims.Add(new Claim(ClaimTypes.Role, "SuperAdmin"));
于 2015-02-09T13:25:54.920 回答
3

您需要在类型为 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")]在控制器中使用该属性。

于 2017-10-20T03:33:10.060 回答