Идентификация ASP.NET "Ролевые" заявки
Я понимаю, что могу использовать утверждения, чтобы делать заявления о пользователе:
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "Peter"));
claims.Add(new Claim(ClaimTypes.Email, "[email protected]"));
Но как мне хранить претензии на основе роли? Например:
Пользователь супер администратора.
claims.Add(new Claim("IsSuperAdmin, "true"));
Параметр value "true" чувствует себя полностью избыточным. Как еще это выражение может быть выражено с помощью претензий?
Ответы
Ответ 1
Это уже сделано для вас с помощью фреймворка. Когда пользователь вошел в систему, все роли пользователя добавляются в виде претензий с типом требований, который является ClaimTypes.Role
, а значения - это имя роли.
И когда вы выполняете IPrincipal.IsInRole("SuperAdmin")
, фреймворк проверяет, присутствует ли у пользователя требование с типом ClaimTypes.Role
и значением SuperAdmin
.
Так что не нужно ничего особенного делать. Просто добавьте пользователя в роль.
Ответ 2
Вы можете хранить роли, используя свойство ClaimType Role
claims.Add(new Claim(ClaimTypes.Role, "SuperAdmin"));
Ответ 3
Вам нужно указать роль в претензии с типом ClaimsType.Role, а затем указать тип претензии, который содержит роль в ClaimsIdentity, как показано ниже.
var claimsIdentity = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Email, "[email protected]"),
new Claim(ClaimTypes.Name, "Peter"),
new Claim(ClaimTypes.Role, "SuperAdmin"),
},
"ApplicationCookie", ClaimTypes.Email, ClaimTypes.Role);
Это позволит вам использовать атрибут [Authorize(Roles = "SuperAdmin")]
в ваших контроллерах.