Как получить идентификатор ролей, для которых пользователь зарегистрирован в MVC 5

Я пытаюсь получить IList<ApplicationRole> ролей, в которых зарегистрирован пользователь.

Теперь в классе Usermanager я вижу вызов функции IList<String> usersRoles = userManager.GetRoles(id); Но он просто возвращает имя роли в виде строки. Это не помогает мне, так как мне нужны id , name и description роли.

Как я могу сделать аналогичный вызов, но получить обратно applicationRole, а не строку?

вот моя модель:

   public class ApplicationRole : IdentityRole
{
    [Display(Name = "Description")]
    [StringLength(100, MinimumLength = 5)]
    public string Description { get; set; }

}

person Zapnologica    schedule 04.02.2014    source источник


Ответы (3)


Я думаю, вам нужно запросить ApplicationDbContext для этого, поскольку нет очевидного способа получить его с помощью одного вызова из API UserManager или UserStore...

var context = new ApplicationDbContext();
var roles = await context.Users
                    .Where(u => u.Id == userId)
                    .SelectMany(u => u.Roles)
                    .Join(context.Roles, ur => ur.RoleId, r => r.Id, (ur, r) => r)
                    .ToListAsync();
person Anthony Chu    schedule 04.02.2014

Я думаю, вы ищете RoleManager. Он очень похож по форме и функциям на UserManager, но специально предназначен для CRUD с ролями.

var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

Где context — это экземпляр вашего DbContext.

Затем вы можете сделать:

var role = await RoleManager.FindByIdAsync(roleId);

Or

var role = await RoleManager.FindByNameAsync(roleName); 
person Chris Pratt    schedule 04.02.2014

Вы можете попробовать это, чтобы получить список ApplicationRoles.

 List<string> roleNames = UserManager.GetRoles(userId).ToList();

 List<ApplicationRole> roles = RoleManager.Roles.Where(r => roleNames.Contains(r.Name)).ToList();
person Andrew Sin    schedule 18.07.2019