private UserModel GetUserModel(UserRolesInfo userRoles, Dictionary<string, Dictionary<CourseRole, List<string>>> coursesForUsers, List<string> courses) { var user = new UserModel(userRoles) { CoursesAccess = new Dictionary<string, ICoursesAccessListModel> { { LmsRoles.SysAdmin, new SingleCourseAccessModel { HasAccess = userRoles.Roles.Contains(LmsRoles.SysAdmin), ToggleUrl = Url.Action("ToggleSystemRole", new { userId = userRoles.UserId, role = LmsRoles.SysAdmin }) } } } }; Dictionary<CourseRole, List<string>> coursesForUser; if (!coursesForUsers.TryGetValue(userRoles.UserId, out coursesForUser)) coursesForUser = new Dictionary<CourseRole, List<string>>(); foreach (var role in Enum.GetValues(typeof(CourseRole)).Cast<CourseRole>().Where(roles => roles != CourseRole.Student)) { user.CoursesAccess[role.ToString()] = new ManyCourseAccessModel { CoursesAccesses = courses .Select(s => new CourseAccessModel { CourseId = s, HasAccess = coursesForUser.ContainsKey(role) && coursesForUser[role].Contains(s), ToggleUrl = Url.Action("ToggleRole", new { courseId = s, userId = user.UserId, role }) }) .ToList() }; } return user; }
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; }