Commit 5fdf795d by Calen Pennington

Merge pull request #605 from MITx/feature/prefetch_user_groups

Reduce # of queries for auth checks on Progress page by prefetching user groups
parents 05da125a 04439a32
...@@ -321,7 +321,7 @@ def _has_staff_access_to_location(user, location): ...@@ -321,7 +321,7 @@ def _has_staff_access_to_location(user, location):
return True return True
# If not global staff, is the user in the Auth group for this class? # If not global staff, is the user in the Auth group for this class?
user_groups = [x[1] for x in user.groups.values_list()] user_groups = [g.name for g in user.groups.all()]
staff_group = _course_staff_group_name(location) staff_group = _course_staff_group_name(location)
if staff_group in user_groups: if staff_group in user_groups:
debug("Allow: user in group %s", staff_group) debug("Allow: user in group %s", staff_group)
......
...@@ -328,6 +328,10 @@ def progress(request, course_id, student_id=None): ...@@ -328,6 +328,10 @@ def progress(request, course_id, student_id=None):
# NOTE: To make sure impersonation by instructor works, use # NOTE: To make sure impersonation by instructor works, use
# student instead of request.user in the rest of the function. # student instead of request.user in the rest of the function.
# The pre-fetching of groups is done to make auth checks not require an
# additional DB lookup (this kills the Progress page in particular).
student = User.objects.prefetch_related("groups").get(id=student.id)
student_module_cache = StudentModuleCache.cache_for_descriptor_descendents( student_module_cache = StudentModuleCache.cache_for_descriptor_descendents(
course_id, student, course) course_id, student, course)
course_module = get_module(student, request, course.location, course_module = get_module(student, request, course.location,
......
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