Owin утверждает - добавьте несколько ClaimTypes.Role
У меня есть приложение, в котором пользователям могут быть назначены следующие роли:
- SuperAdmin
- Администратор
- Пользователь
Один пользователь может назначить две или более роли, например. как SuperAdmin, так и User. Мое приложение использует претензии, и поэтому я хочу также аутентифицировать роли пользователей через претензии. например:
[Authorize(Roles="Admin")]
К сожалению, я не знаю, как добавить несколько ролей в свой ClaimTypes.Role. У меня есть следующий код:
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, name),
new Claim(ClaimTypes.Email, email),
new Claim(ClaimTypes.Role, "User", "Admin", "SuperAdmin")
},
"ApplicationCookie");
Как вы можете видеть, я попытался добавить больше ролей для иллюстрации, но, очевидно, это сделано неправильно, и поэтому не работает.
Поэтому всякая помощь очень ценится.
Ответы
Ответ 1
Идентификатор претензий может иметь несколько претензий с одним и тем же типом ClaimType. Это позволит использовать метод HasClaim для проверки наличия конкретной роли пользователя.
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, name),
new Claim(ClaimTypes.Email, email),
new Claim(ClaimTypes.Role, "User"),
new Claim(ClaimTypes.Role, "Admin"),
new Claim(ClaimTypes.Role,"SuperAdmin")
},
"ApplicationCookie");
Ответ 2
@Parameswar Рао объяснил хорошо, но в случае динамических ролей
Например, пользовательский объект уже имеет роль свойства типа list, например
![enter image description here]()
затем с помощью локальных функций
ClaimsIdentity getClaimsIdentity()
{
return new ClaimsIdentity(
getClaims()
);
Claim[] getClaims()
{
List<Claim> claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, user.UserName));
foreach (var item in user.Roles)
{
claims.Add(new Claim(ClaimTypes.Role, item));
}
return claims.ToArray();
}
}
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = getClaimsIdentity()
}