как получить ролевые объекты вместо роли пользователя в Asp. net Core 3.1 - PullRequest
0 голосов
/ 30 апреля 2020

Я реализовал Asp.net core 3.1 Identity и выполнил приведенную ниже строку, чтобы получить роль. Это дает мне только имена. Но я хочу получить ролевые объекты и показать список в выпадающем списке. Можно ли получить идентификатор и название роли?

 var userRoles = await _userManager.GetRolesAsync(userIdentity);

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете напрямую запросить базу данных для получения идентификатора и имени роли текущего пользователя.

Внедрить ApplicationDbContext в контроллер:

private readonly ApplicationDbContext _applicationDbContext;

public HomeController(ApplicationDbContext applicationDbContext)
{

    _applicationDbContext = applicationDbContext;
}

Создать класс роли:

public class Role {
    public string  ID { get; set; }

    public string Name { get; set; }
}

И запросить роли как:

if (User.Identity.IsAuthenticated)
{
    var userid = User.Claims.Where(x => x.Type == ClaimTypes.NameIdentifier).FirstOrDefault().Value;
    var query = from b in _applicationDbContext.UserRoles
                where b.UserId == userid
                join p in _applicationDbContext.Roles
                    on b.RoleId equals p.Id into grouping
                from p in grouping.DefaultIfEmpty()
                select new Role { ID=p.Id, Name=p.Name };

    var roles = query.ToList();
}
...