Подтвердить что ты не робот

Идентификация 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" чувствует себя полностью избыточным. Как еще это выражение может быть выражено с помощью претензий?

4b9b3361

Ответ 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")] в ваших контроллерах.