Skip to content

Commit f9aafe7

Browse files
committed
squash!: Updated docstrings
1 parent f13a62a commit f9aafe7

1 file changed

Lines changed: 132 additions & 9 deletions

File tree

openedx_authz/rest_api/v1/views.py

Lines changed: 132 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -560,9 +560,63 @@ def get_queryset(self) -> QuerySet:
560560
@view_auth_classes()
561561
class TeamMembersAPIView(APIView):
562562
"""
563-
API view for listing users in relation to role assignments
564-
This API is used in the Team Members section in Admin Console.
565-
In this content, a team member is anyone with studio access.
563+
API view for listing users in relation to role assignments.
564+
This API is used in the Team Members section in the Admin Console.
565+
In this context, a team member is anyone with studio access.
566+
567+
**Endpoints**
568+
569+
- GET: Retrieve all users that have at least one role assignment
570+
571+
**Query Parameters**
572+
573+
- scopes (Optional): Comma-separated list of scopes to filter by (e.g., 'lib:Org1:LIB1')
574+
- orgs (Optional): Comma-separated list of orgs to filter by (e.g., 'Org1,Org2')
575+
- search (Optional): Search term to filter users by username, full name, or email
576+
- sort_by (Optional): Field to sort by. Options: username, full_name, email. Defaults to username
577+
- order (Optional): Sort order, 'asc' or 'desc'. Defaults to asc
578+
- page (Optional): Page number for pagination
579+
- page_size (Optional): Number of items per page
580+
581+
**Response Format**
582+
583+
Returns a paginated list of team member objects, each containing:
584+
585+
- username: The user's username
586+
- full_name: The user's full name
587+
- email: The user's email address
588+
- assignation_count: The number of role assignments the user has
589+
590+
**Authentication and Permissions**
591+
592+
- Requires authenticated user.
593+
- Results are filtered according to calling user's scope-level view permissions.
594+
595+
**Example Request**
596+
597+
GET /api/authz/v1/users/?orgs=Org1&search=john&sort_by=username&order=asc&page=1&page_size=10
598+
599+
**Example Response**::
600+
601+
{
602+
"count": 2,
603+
"next": null,
604+
"previous": null,
605+
"results": [
606+
{
607+
"username": "jane_doe",
608+
"full_name": "Jane Doe",
609+
"email": "[email protected]",
610+
"assignation_count": 3
611+
},
612+
{
613+
"username": "john_doe",
614+
"full_name": "John Doe",
615+
"email": "[email protected]",
616+
"assignation_count": 1
617+
}
618+
]
619+
}
566620
"""
567621

568622
pagination_class = AuthZAPIViewPagination
@@ -691,25 +745,94 @@ def post(self, request: HttpRequest) -> Response:
691745
@view_auth_classes()
692746
class TeamMemberAssignmentsAPIView(APIView):
693747
"""
694-
API view for listing user role assignments
748+
API view for listing role assignments for a specific user.
749+
This API is used in the Team Member detail view in the Admin Console.
750+
751+
**Endpoints**
752+
753+
- GET: Retrieve all role assignments for a specific user
754+
755+
**URL Parameters**
756+
757+
- username (Required): The username of the user to retrieve assignments for
758+
759+
**Query Parameters**
760+
761+
- orgs (Optional): Comma-separated list of orgs to filter assignments by (e.g., 'Org1,Org2')
762+
- roles (Optional): Comma-separated list of roles to filter assignments by (e.g., 'library_admin,library_user')
763+
- sort_by (Optional): Field to sort by. Options: role, org, scope. Defaults to role
764+
- order (Optional): Sort order, 'asc' or 'desc'. Defaults to asc
765+
- page (Optional): Page number for pagination
766+
- page_size (Optional): Number of items per page
767+
768+
**Response Format**
769+
770+
Returns a paginated list of assignment objects, each containing:
771+
772+
- is_superadmin: Whether this entry denotes a superadmin (staff/superuser)
773+
- role: The role name (e.g., 'library_admin', 'django.superuser')
774+
- org: The org over which this role is applied ('*' for superadmins)
775+
- scope: The scope over which this role is applied ('*' for superadmins)
776+
- permission_count: The number of permissions that apply to this role (null for superadmins)
777+
778+
**Authentication and Permissions**
779+
780+
- Requires authenticated user.
781+
- Results are filtered according to calling user's scope-level view permissions.
782+
- Superadmin entries are always included when the target user is a staff/superuser.
783+
784+
**Example Request**
785+
786+
GET
787+
/api/authz/v1/users/john_doe/assignments/?orgs=Org1&roles=library_admin&sort_by=role&order=asc&page=1&page_size=10
788+
789+
**Example Response**::
790+
791+
{
792+
"count": 2,
793+
"next": null,
794+
"previous": null,
795+
"results": [
796+
{
797+
"is_superadmin": true,
798+
"role": "django.superuser",
799+
"org": "*",
800+
"scope": "*",
801+
"permission_count": null
802+
},
803+
{
804+
"is_superadmin": false,
805+
"role": "library_admin",
806+
"org": "Org1",
807+
"scope": "lib:Org1:LIB1",
808+
"permission_count": 11
809+
}
810+
]
811+
}
695812
"""
696813

697814
pagination_class = AuthZAPIViewPagination
698815
filter_backends = [TeamMemberAssignmentsOrderingFilter]
699816

700817
@apidocs.schema(
701818
parameters=[
702-
apidocs.query_parameter("orgs", str, description="The orgs to query assignations for"),
703-
apidocs.query_parameter("roles", str, description="The roles to query assignations for"),
704-
apidocs.query_parameter("sort_by", str, description="The field to sort by"),
705-
apidocs.query_parameter("order", str, description="The order to sort by"),
819+
apidocs.query_parameter("orgs", str, description="Comma-separated list of orgs to filter assignments by"),
820+
apidocs.query_parameter("roles", str, description="Comma-separated list of roles to filter assignments by"),
821+
apidocs.query_parameter(
822+
"sort_by",
823+
str,
824+
description="The field to sort by. Options: role, org, scope. Defaults to role",
825+
),
826+
apidocs.query_parameter(
827+
"order", str, description="The order to sort by. Options: asc, desc. Defaults to asc"
828+
),
706829
apidocs.query_parameter("page", int, description="Page number for pagination"),
707830
apidocs.query_parameter("page_size", int, description="Number of items per page"),
708831
],
709832
responses={
710833
status.HTTP_200_OK: TeamMemberAssignmentSerializer(many=True),
711834
status.HTTP_400_BAD_REQUEST: "The request parameters are invalid",
712-
status.HTTP_401_UNAUTHORIZED: "The user is not authenticated or does not have the required permissions",
835+
status.HTTP_401_UNAUTHORIZED: "The user is not authenticated",
713836
},
714837
)
715838
def get(self, request: HttpRequest, username: str) -> Response:

0 commit comments

Comments
 (0)