@@ -317,8 +317,10 @@ def migrate_authz_to_legacy_course_roles(
317317 """
318318 _validate_migration_input (course_id_list , org_id )
319319
320- # CourseOverviewData and OrgCourseOverviewGlobData share the same namespace,
321- # so filtering by CourseOverviewData captures both course-level and org-level glob assignments.
320+ # CourseOverviewData and OrgCourseOverviewGlobData share the same NAMESPACE ("course-v1"),
321+ # and get_all_role_assignments_per_scope_type matches by NAMESPACE. Passing CourseOverviewData
322+ # therefore captures both course-level and org-level glob assignments. The exact scope type
323+ # is narrowed per-assignment via isinstance checks in the loop below.
322324 role_assignments = get_all_role_assignments_per_scope_type (scope_type = CourseOverviewData )
323325
324326 # Two cases here:
@@ -343,6 +345,14 @@ def migrate_authz_to_legacy_course_roles(
343345 roles_with_no_errors = []
344346 unassignments = defaultdict (list )
345347
348+ user_external_keys = {assignment .subject .external_key for assignment in role_assignments }
349+ users_by_username = {
350+ subject .user .username : subject .user
351+ for subject in user_subject_model .objects .filter (
352+ user__username__in = user_external_keys
353+ ).select_related ("user" )
354+ }
355+
346356 for role_assignment in role_assignments :
347357
348358 # Per valid role assignment, create corresponding CourseAccessRole entry
@@ -353,7 +363,7 @@ def migrate_authz_to_legacy_course_roles(
353363 scope_external_key = role_assignment .scope .external_key
354364
355365 course_access_role_kwargs = {
356- "user" : user_subject_model . objects . get ( user__username = user_external_key ). user ,
366+ "user" : users_by_username [ user_external_key ] ,
357367 "role" : COURSE_ROLE_EQUIVALENCES [role_external_key ],
358368 }
359369
@@ -363,6 +373,8 @@ def migrate_authz_to_legacy_course_roles(
363373 elif isinstance (role_assignment .scope , OrgCourseOverviewGlobData ):
364374 course_access_role_kwargs ["org" ] = role_assignment .scope .org
365375 else :
376+ # This would only happen for course roles assigned instance-wide
377+ # which is not yet supported
366378 logger .error (
367379 f"Unexpected scope type: { type (role_assignment .scope )} for RoleAssignment with "
368380 f"scope: { scope_external_key } , user: { user_external_key } and role: { role_external_key } , skipping."
0 commit comments