@@ -319,8 +319,10 @@ def migrate_authz_to_legacy_course_roles(
319319 """
320320 _validate_migration_input (course_id_list , org_id )
321321
322- # CourseOverviewData and OrgCourseOverviewGlobData share the same namespace,
323- # so filtering by CourseOverviewData captures both course-level and org-level glob assignments.
322+ # CourseOverviewData and OrgCourseOverviewGlobData share the same NAMESPACE ("course-v1"),
323+ # and get_all_role_assignments_per_scope_type matches by NAMESPACE. Passing CourseOverviewData
324+ # therefore captures both course-level and org-level glob assignments. The exact scope type
325+ # is narrowed per-assignment via isinstance checks in the loop below.
324326 role_assignments = get_all_role_assignments_per_scope_type (scope_type = CourseOverviewData )
325327
326328 # Two cases here:
@@ -345,6 +347,14 @@ def migrate_authz_to_legacy_course_roles(
345347 roles_with_no_errors = []
346348 unassignments = defaultdict (list )
347349
350+ user_external_keys = {assignment .subject .external_key for assignment in role_assignments }
351+ users_by_username = {
352+ subject .user .username : subject .user
353+ for subject in user_subject_model .objects .filter (
354+ user__username__in = user_external_keys
355+ ).select_related ("user" )
356+ }
357+
348358 for role_assignment in role_assignments :
349359
350360 # Per valid role assignment, create corresponding CourseAccessRole entry
@@ -355,7 +365,7 @@ def migrate_authz_to_legacy_course_roles(
355365 scope_external_key = role_assignment .scope .external_key
356366
357367 course_access_role_kwargs = {
358- "user" : user_subject_model . objects . get ( user__username = user_external_key ). user ,
368+ "user" : users_by_username [ user_external_key ] ,
359369 "role" : COURSE_ROLE_EQUIVALENCES [role_external_key ],
360370 }
361371
@@ -365,6 +375,8 @@ def migrate_authz_to_legacy_course_roles(
365375 elif isinstance (role_assignment .scope , OrgCourseOverviewGlobData ):
366376 course_access_role_kwargs ["org" ] = role_assignment .scope .org
367377 else :
378+ # This would only happen for course roles assigned instance-wide
379+ # which is not yet supported
368380 logger .error (
369381 f"Unexpected scope type: { type (role_assignment .scope )} for RoleAssignment with "
370382 f"scope: { scope_external_key } , user: { user_external_key } and role: { role_external_key } , skipping."
0 commit comments