Получить всех пользователей и их роли, которые они получили, в таблицу asp.net mvc

Я пытаюсь понять, как собрать всех пользователей и их роли в хорошо организованную таблицу, видел много разных способов, но ни один из них не сработал для меня. я получил немного на пути по крайней мере ... кто-нибудь, кто может мне помочь?

С помощью этого кода я получаю все роли:

        var context = new ApplicationDbContext();
        var roleStore = new RoleStore<IdentityRole>(context);
        var roleManager = new RoleManager<IdentityRole>(roleStore);
        var roles = (from r in roleManager.Roles select r.Name).ToList();
        ViewBag.Roles = roles.ToList();

и с помощью этого кода я получаю всех зарегистрированных пользователей:

        var context = new ApplicationDbContext();
        var userStore = new UserStore<ApplicationUser>(context);
        var userManager = new UserManager<ApplicationUser>(userStore);
        var users = (from u in userManager.Users select u.UserName).ToList();
        ViewBag.Users = users.ToList();

и, наконец, с помощью этого кода я получаю идентификаторы всех пользователей

        var context = new ApplicationDbContext();
        var user = (from u in userManager.Users select u.Id).ToList();
        ViewBag.id = user.ToList();

Но как мне получить всех пользователей с их ролями? я действительно не могу понять это


person per källström    schedule 21.01.2016    source источник
comment
У вас есть таблица сопоставления между пользователями и ролями?   -  person Aleksandr Ivanov    schedule 22.01.2016
comment
@AleksandrIvanov Я так не думаю, однако в моем представлении ролей в качестве администратора я могу проверить, какие роли есть у пользователей и т. Д., Следуя этому руководству andersnordby.wordpress.com/2014/11/28/ с небольшими изменениями   -  person per källström    schedule 22.01.2016


Ответы (2)


Вот один из вариантов получения списка пользователей (с именем пользователя) и списка связанных ролей.

Контроллер:

public ActionResult GetRoles()
        {
            var userRoles = new List<RolesViewModel>();
            var context = new ApplicationDbContext();
            var userStore = new UserStore<ApplicationUser>(context);
            var userManager = new UserManager<ApplicationUser>(userStore);

            //Get all the usernames
            foreach (var user in userStore.Users)
            {
                var r = new RolesViewModel
                {
                    UserName = user.UserName
                };
                userRoles.Add(r);
            }
            //Get all the Roles for our users
            foreach (var user in userRoles)
            {
                user.RoleNames = userManager.GetRoles(userStore.Users.First(s=>s.UserName==user.UserName).Id);
            }

            return View(userRoles);
        }

Модель представления

public class RolesViewModel
{
    public IEnumerable<string> RoleNames { get; set; }
    public string UserName { get; set; }
}

Вид: простой

@model IEnumerable<StackOverflow.Models.RolesViewModel>
@foreach (var user in Model.ToList())
{
    <div> @user.UserName -- </div>
    foreach (var role in user.RoleNames)
    {
        <div> @role </div>
    }
    <br />
}
person IndieTech Solutions    schedule 22.01.2016

Я полагаю, что вы используете таблицу AspNetUserRoles для управления пользователями и ролями. Вы можете оптимизировать отображение пользователя/роли в сетке с помощью EF и Linq.

[GridAction]
public ActionResult _GetUsers()

{
    var users = from user in xcsnEntities.Users
                select new
                {
                    Role = user.Roles.FirstOrDefault().RoleName,
                    IsApproved = user.Membership.IsApproved,
                    Email = user.Membership.Email,
                    UserName = user.UserName
                };

    return View(new GridModel(users));
}
person Nate    schedule 22.01.2016