1515from rest_framework .views import APIView
1616
1717from openedx_authz import api
18- from openedx_authz .rest_api .utils import get_user_by_username_or_email , view_auth_classes
18+ from openedx_authz .rest_api .enums import SortField , SortOrder
19+ from openedx_authz .rest_api .utils import get_user_by_username_or_email , sort_users , view_auth_classes
1920from openedx_authz .rest_api .v1 .paginators import AuthZAPIViewPagination
2021from openedx_authz .rest_api .v1 .serializers import (
2122 AddUserToRoleWithScopeSerializer ,
@@ -92,6 +93,8 @@ class RoleUserAPIView(APIView):
9293 apidocs .query_parameter ("scope" , str , description = "The authorization scope for the role" ),
9394 apidocs .query_parameter ("page" , int , description = "Page number for pagination" ),
9495 apidocs .query_parameter ("page_size" , int , description = "Number of items per page" ),
96+ apidocs .query_parameter ("sort_by" , str , description = "The field to sort by" ),
97+ apidocs .query_parameter ("order" , str , description = "The order to sort by" ),
9598 ],
9699 responses = {
97100 status .HTTP_200_OK : "The users were retrieved successfully" ,
@@ -101,16 +104,20 @@ class RoleUserAPIView(APIView):
101104 )
102105 def get (self , request : HttpRequest ) -> Response :
103106 """Retrieve all users with role assignments within a specific scope."""
104- # TODO: Filter by role
105107 serializer = ListUsersInRoleWithScopeSerializer (data = request .query_params )
106108 serializer .is_valid (raise_exception = True )
107109 user_role_assignments = api .get_all_user_role_assignments_in_scope_v2 (serializer .validated_data ["scope" ])
108110
109111 paginator = self .pagination_class ()
110112 paginated_assignments = paginator .paginate_queryset (user_role_assignments , request )
111113
112- serializer = RoleAssignmentSerializer (paginated_assignments , many = True )
113- return paginator .get_paginated_response (serializer .data )
114+ response_serializer = RoleAssignmentSerializer (paginated_assignments , many = True )
115+
116+ sort_by = serializer .validated_data .get ("sort_by" , SortField .USERNAME )
117+ order = serializer .validated_data .get ("order" , SortOrder .ASC )
118+ user_role_assignments = sort_users (response_serializer .data , sort_by , order )
119+
120+ return paginator .get_paginated_response (user_role_assignments )
114121
115122 @apidocs .schema (
116123 body = AddUserToRoleWithScopeSerializer ,
0 commit comments