Exemple #1
0
        private async Task <List <string> > GetUserIdsWithProgressNotVisibleForUser(string courseId, List <string> userIds)
        {
            var isSystemAdministrator = await IsSystemAdministratorAsync().ConfigureAwait(false);

            if (isSystemAdministrator)
            {
                return(null);
            }
            if (await groupAccessesRepo.CanUserSeeAllCourseGroupsAsync(UserId, courseId))
            {
                return(null);
            }
            var userRole = await courseRolesRepo.GetRoleAsync(UserId, courseId).ConfigureAwait(false);

            var groups = userRole == CourseRoleType.Instructor ? await groupAccessesRepo.GetAvailableForUserGroupsAsync(courseId, UserId, false, true, false) : new List <Group>();

            groups = groups
                     .Concat((await groupMembersRepo.GetUserGroupsAsync(courseId, UserId, false)).Where(g => g.CanUsersSeeGroupProgress))
                     .Distinct().ToList();
            var members = new [] { UserId }.Concat(await groupMembersRepo.GetGroupsMembersIdsAsync(groups.Select(g => g.Id).ToList())).ToHashSet();
            var allIdsInMembers = members.IsSupersetOf(userIds);

            if (allIdsInMembers)
            {
                return(null);
            }
            var notVisibleUserIds = userIds.ToHashSet();

            notVisibleUserIds.ExceptWith(members);
            return(notVisibleUserIds.ToList());
        }
Exemple #2
0
        public async Task <ActionResult <CourseRolesResponse> > CourseRoles()
        {
            var userId = User.GetUserId();
            var isSystemAdministrator = await usersRepo.IsSystemAdministrator(userId);

            var visibleCourses = await unitsRepo.GetVisibleCourses();

            var rolesByCourse = (await courseRolesRepo.GetRoles(userId).ConfigureAwait(false))
                                .Where(kvp => kvp.Value != CourseRoleType.Student).ToList();
            var courseAccesses = await coursesRepo.GetUserAccesses(userId).ConfigureAwait(false);

            var courseAccessesByCourseId = courseAccesses.GroupBy(a => a.CourseId).Select(
                g => new CourseAccessResponse
            {
                CourseId = g.Key,
                Accesses = g.Select(a => a.AccessType).ToList()
            }
                ).ToList();
            var coursesInWhichUserHasAnyRole = new HashSet <string>(rolesByCourse.Select(kvp => kvp.Key), StringComparer.OrdinalIgnoreCase);
            var groupsWhereIAmStudent        = (await groupMembersRepo.GetUserGroupsAsync(userId).ConfigureAwait(false))
                                               .Where(g => visibleCourses.Contains(g.CourseId) || coursesInWhichUserHasAnyRole.Contains(g.CourseId) || isSystemAdministrator);

            return(new CourseRolesResponse
            {
                IsSystemAdministrator = isSystemAdministrator,
                CourseRoles = rolesByCourse.Select(kvp => new CourseRoleResponse
                {
                    CourseId = kvp.Key,
                    Role = kvp.Value,
                }).ToList(),
                CourseAccesses = courseAccessesByCourseId,
                GroupsAsStudent = groupsWhereIAmStudent.Where(g => g.CanUsersSeeGroupProgress).Select(BuildShortGroupInfo).ToList()
            });
        }
        public async Task <ActionResult <CourseRolesResponse> > CourseRoles()
        {
            var userId = User.GetUserId();
            var isSystemAdministrator = User.IsSystemAdministrator();

            var rolesByCourse = await courseRolesRepo.GetRolesAsync(userId).ConfigureAwait(false);

            var courseAccesses = await coursesRepo.GetUserAccessesAsync(userId).ConfigureAwait(false);

            var courseAccessesByCourseId = courseAccesses.GroupBy(a => a.CourseId).Select(
                g => new CourseAccessResponse
            {
                CourseId = g.Key,
                Accesses = g.Select(a => a.AccessType).ToList()
            }
                ).ToList();
            var groupsWhereIAmStudent = await groupMembersRepo.GetUserGroupsAsync(userId).ConfigureAwait(false);

            return(new CourseRolesResponse
            {
                IsSystemAdministrator = isSystemAdministrator,
                CourseRoles = rolesByCourse.Where(kvp => kvp.Value != CourseRoleType.Student).Select(kvp => new CourseRoleResponse
                {
                    CourseId = kvp.Key,
                    Role = kvp.Value,
                }).ToList(),
                CourseAccesses = courseAccessesByCourseId,
                GroupsAsStudent = groupsWhereIAmStudent.Where(g => g.CanUsersSeeGroupProgress).Select(BuildShortGroupInfo).ToList()
            });
        }
Exemple #4
0
        public async Task <List <string> > GetInstructorsOfAllGroupsWhereUserIsMemberAsync(string courseId, string userId)
        {
            var groupsWhereUserIsStudent = await groupMembersRepo.GetUserGroupsAsync(courseId, userId).ConfigureAwait(false);

            var accesses = await GetGroupAccessesAsync(groupsWhereUserIsStudent.Select(g => g.Id)).ConfigureAwait(false);

            var ownersIds = groupsWhereUserIsStudent.Select(g => g.OwnerId).ToList();

            return(accesses
                   .SelectMany(kvp => kvp.Value.Select(a => a.User.Id))
                   .Concat(ownersIds)
                   .Distinct()
                   .ToList());
        }