Commit 43779814 by Sven Marnach

Optimise getting list of courses from Enrollment API for global staff.

parent dd021841
...@@ -32,7 +32,7 @@ from openedx.core.djangoapps.user_api.models import UserOrgTag ...@@ -32,7 +32,7 @@ from openedx.core.djangoapps.user_api.models import UserOrgTag
from openedx.core.lib.django_test_client_utils import get_absolute_url from openedx.core.lib.django_test_client_utils import get_absolute_url
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.roles import CourseStaffRole from student.roles import CourseStaffRole
from student.tests.factories import UserFactory, CourseModeFactory from student.tests.factories import AdminFactory, CourseModeFactory, UserFactory
from embargo.test_utils import restrict_course from embargo.test_utils import restrict_course
...@@ -353,11 +353,15 @@ class EnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase): ...@@ -353,11 +353,15 @@ class EnrollmentTest(EnrollmentTestMixin, ModuleStoreTestCase, APITestCase):
self.client.login(username=self.OTHER_USERNAME, password=self.PASSWORD) self.client.login(username=self.OTHER_USERNAME, password=self.PASSWORD)
self._assert_enrollments_visible_in_list([]) self._assert_enrollments_visible_in_list([])
# Create a staff user for self.course (but nor for other_course) and log her in. # Create a staff user for self.course (but nor for other_course) and log her in.
staff_user = UserFactory.create(username='staff', email='staff@example.com', password=self.PASSWORD,) staff_user = UserFactory.create(username='staff', email='staff@example.com', password=self.PASSWORD)
CourseStaffRole(self.course.id).add_users(staff_user) CourseStaffRole(self.course.id).add_users(staff_user)
self.client.login(username='staff', password=self.PASSWORD) self.client.login(username='staff', password=self.PASSWORD)
# Verify that she can see only the enrollment in the course she has staff privileges for. # Verify that she can see only the enrollment in the course she has staff privileges for.
self._assert_enrollments_visible_in_list([self.course]) self._assert_enrollments_visible_in_list([self.course])
# Create a global staff user, and verify she can see all enrollments.
AdminFactory(username='global_staff', email='global_staff@example.com', password=self.PASSWORD)
self.client.login(username='global_staff', password=self.PASSWORD)
self._assert_enrollments_visible_in_list([self.course, other_course])
# Verify the server can see all enrollments. # Verify the server can see all enrollments.
self.client.logout() self.client.logout()
self._assert_enrollments_visible_in_list([self.course, other_course], use_server_key=True) self._assert_enrollments_visible_in_list([self.course, other_course], use_server_key=True)
......
...@@ -32,7 +32,7 @@ from enrollment.errors import ( ...@@ -32,7 +32,7 @@ from enrollment.errors import (
) )
from student.auth import user_has_role from student.auth import user_has_role
from student.models import User from student.models import User
from student.roles import CourseStaffRole from student.roles import CourseStaffRole, GlobalStaff
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -472,7 +472,8 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn): ...@@ -472,7 +472,8 @@ class EnrollmentListView(APIView, ApiKeyPermissionMixIn):
).format(username=username) ).format(username=username)
} }
) )
if username == request.user.username or self.has_api_key_permissions(request): if username == request.user.username or GlobalStaff().has_user(request.user) or \
self.has_api_key_permissions(request):
return Response(enrollment_data) return Response(enrollment_data)
filtered_data = [] filtered_data = []
for enrollment in enrollment_data: for enrollment in enrollment_data:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment