Как получить rolename из объекта Roles в ядре asp.net - PullRequest
0 голосов
/ 08 октября 2018

Я делаю это, чтобы получить роли пользователя:

var roles = await _userManager.GetRolesAsync(user);

После этого простой проход может служить такой цели:

foreach(var r in roles)
{
  if (r.Name == "School")
  {
  }
} 

Теперь я застрялзная, что должно быть собственностью объекта р.Вы можете ответить на этот очень простой вопрос?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

UserManager<TUser>.GetRolesAsync(TUser) возвращает Task<IList<String>>.В вашем примере вы используете await, что означает, что ваша переменная roles становится типа IList<String>.При итерации по roles с вашим оператором foreach каждое значение r в цикле просто имеет тип String.Очевидно, что String не содержит свойства с именем Name, поэтому ошибка имеет смысл.

Похоже, вы ожидали, что r будет представлять сложный тип (возможно, IdentityRole), но так как здесь просто строка, вы можете просто сравнить r напрямую, вот так:

foreach(var r in roles)
{
    if (r == "School")
    {

    }
} 
0 голосов
/ 08 октября 2018

Когда вы получаете object из Role, используя Identity, у вас есть Список объектов со многими свойствами, такими как: User, Id, Name, NormalizeName и что-то вроде этого.Вы можете отслеживать и видеть их.

Вы должны знать, что вы хотите.

Если вы хотите проверить userRoles с помощью системы Roles, вы можете написать свой код как:

var roles = await _roleManager.Roles.TolistAsync();
var userRolesName = await _userManagment.GetRolesAsync(user);

Сейчас!у вас есть список ролей, которые есть у пользователя, и у вас есть все роли. и с помощью этого кода вы получаете объект ролей, которые пользователь имеет как:

var userRoles = userRolesName.Where(x=>userRolesName.Contain(x.Name));

С этим кодом у вас есть объект ролей, которые есть у пользователя.и вы можете обработать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...