private UserListModel GetUserListModel(IEnumerable<UserRolesInfo> users) { var coursesForUsers = db.UserRoles .GroupBy(userRole => userRole.UserId) .ToDictionary( g => g.Key, g => g .GroupBy(userRole => userRole.Role) .ToDictionary( gg => gg.Key, gg => gg .Select(userRole => userRole.CourseId) .ToList() ) ); var courses = User.GetControllableCoursesId().ToList(); var model = new UserListModel { IsCourseAdmin = User.HasAccess(CourseRole.CourseAdmin), ShowDangerEntities = User.IsSystemAdministrator(), Users = users.Select(user => GetUserModel(user, coursesForUsers, courses)).ToList() }; return model; }
private UserListModel GetUserListModel(IEnumerable<UserRolesInfo> userRoles, string courseId) { var rolesForUsers = db.UserRoles .Where(role => role.CourseId == courseId) .GroupBy(role => role.UserId) .ToDictionary( g => g.Key, g => g.Select(role => role.Role).Distinct().ToList() ); var model = new UserListModel { IsCourseAdmin = true, ShowDangerEntities = false, Users = new List<UserModel>() }; foreach (var userRolesInfo in userRoles) { var user = new UserModel(userRolesInfo); List<CourseRole> roles; if (!rolesForUsers.TryGetValue(userRolesInfo.UserId, out roles)) roles = new List<CourseRole>(); user.CoursesAccess = Enum.GetValues(typeof(CourseRole)) .Cast<CourseRole>() .Where(courseRole => courseRole != CourseRole.Student) .ToDictionary( courseRole => courseRole.ToString(), courseRole => (ICoursesAccessListModel)new SingleCourseAccessModel { HasAccess = roles.Contains(courseRole), ToggleUrl = Url.Action("ToggleRole", "Account", new { courseId, userId = user.UserId, role = courseRole }) }); model.Users.Add(user); } return model; }