Skip to content

Commit cf18189

Browse files
committed
squash!: Apply PR suggestions
1 parent bf30a64 commit cf18189

4 files changed

Lines changed: 28 additions & 34 deletions

File tree

openedx_authz/api/data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,7 @@ class SuperAdminAssignmentData:
11101110
staff/superuser and their access is not derived from a specific role assignment.
11111111
"""
11121112

1113-
subject: SubjectData = None
1113+
user: "User" = None
11141114
is_staff: bool = False
11151115
is_superuser: bool = False
11161116

openedx_authz/api/users.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"get_user_role_assignments_filtered",
5555
"get_all_user_role_assignments_in_scope",
5656
"get_visible_role_assignments_for_user",
57-
"get_visible_specific_user_role_assignments_for_user",
57+
"get_visible_user_role_assignments_filtered_by_current_user",
5858
"is_user_allowed",
5959
"get_scopes_for_user_and_permission",
6060
"get_users_for_role_in_scope",
@@ -177,7 +177,7 @@ def get_user_role_assignments_for_role_in_scope(
177177
)
178178

179179

180-
def get_visible_specific_user_role_assignments_for_user(
180+
def get_visible_user_role_assignments_filtered_by_current_user(
181181
user_external_key: str,
182182
orgs: list[str] = None,
183183
roles: list[str] = None,
@@ -410,7 +410,7 @@ def get_superadmin_assignments(user_external_keys: list[str] | None = None) -> l
410410
for requested_user in requested_users:
411411
superadmin_assignments.append(
412412
SuperAdminAssignmentData(
413-
subject=UserData(external_key=requested_user.username),
413+
user=requested_user,
414414
is_staff=requested_user.is_staff,
415415
is_superuser=requested_user.is_superuser,
416416
)

openedx_authz/rest_api/v1/serializers.py

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,21 @@ class ActionMixin(serializers.Serializer): # pylint: disable=abstract-method
3434
action = serializers.CharField(max_length=255)
3535

3636

37+
class OrderMixin(serializers.Serializer): # pylint: disable=abstract-method
38+
"""Mixin providing ordering field functionality."""
39+
40+
sort_by = serializers.ChoiceField(
41+
required=False,
42+
choices=[(e.value, e.name) for e in SortField],
43+
default=SortField.USERNAME,
44+
)
45+
order = serializers.ChoiceField(
46+
required=False,
47+
choices=[(e.value, e.name) for e in SortOrder],
48+
default=SortOrder.ASC,
49+
)
50+
51+
3752
class PermissionValidationSerializer(ActionMixin, ScopeMixin): # pylint: disable=abstract-method
3853
"""Serializer for permission validation request."""
3954

@@ -111,20 +126,10 @@ class RemoveUsersFromRoleWithScopeSerializer(
111126
users = CommaSeparatedListField(allow_blank=False)
112127

113128

114-
class ListUsersInRoleWithScopeSerializer(ScopeMixin): # pylint: disable=abstract-method
129+
class ListUsersInRoleWithScopeSerializer(ScopeMixin, OrderMixin): # pylint: disable=abstract-method
115130
"""Serializer for listing users in a role with a scope."""
116131

117132
roles = CommaSeparatedListField(required=False, default=[])
118-
sort_by = serializers.ChoiceField(
119-
required=False,
120-
choices=[(e.value, e.name) for e in SortField],
121-
default=SortField.USERNAME,
122-
)
123-
order = serializers.ChoiceField(
124-
required=False,
125-
choices=[(e.value, e.name) for e in SortOrder],
126-
default=SortOrder.ASC,
127-
)
128133
search = LowercaseCharField(required=False, default=None)
129134

130135

@@ -210,7 +215,7 @@ def get_roles(self, obj: api.RoleAssignmentData) -> list[str]:
210215
return [role.external_key for role in obj.roles]
211216

212217

213-
class ListTeamMembersSerializer(serializers.Serializer): # pylint: disable=abstract-method
218+
class ListTeamMembersSerializer(OrderMixin): # pylint: disable=abstract-method
214219
"""
215220
Serializer for listing team members.
216221
This serializer is TeamMembersAPIView, which is used in the Admin Console.
@@ -219,16 +224,6 @@ class ListTeamMembersSerializer(serializers.Serializer): # pylint: disable=abst
219224

220225
scopes = CaseSensitiveCommaSeparatedListField(required=False, default=[])
221226
orgs = CaseSensitiveCommaSeparatedListField(required=False, default=[])
222-
sort_by = serializers.ChoiceField(
223-
required=False,
224-
choices=[(e.value, e.name) for e in SortField],
225-
default=SortField.USERNAME,
226-
)
227-
order = serializers.ChoiceField(
228-
required=False,
229-
choices=[(e.value, e.name) for e in SortOrder],
230-
default=SortOrder.ASC,
231-
)
232227
search = LowercaseCharField(required=False, default=None)
233228

234229

@@ -261,21 +256,17 @@ def get_assignation_count(self, obj: UserAssignments) -> int:
261256
return len(obj.assignments)
262257

263258

264-
class ListTeamMemberAssignmentsSerializer(serializers.Serializer): # pylint: disable=abstract-method
259+
class ListTeamMemberAssignmentsSerializer(OrderMixin): # pylint: disable=abstract-method
265260
"""Serializer for listing team member assignments."""
266261

267262
orgs = CaseSensitiveCommaSeparatedListField(required=False, default=[])
268263
roles = CaseSensitiveCommaSeparatedListField(required=False, default=[])
264+
# Overriding sort_by from OrderMixin due to different choices and default value
269265
sort_by = serializers.ChoiceField(
270266
required=False,
271267
choices=[(e.value, e.name) for e in AssignmentSortField],
272268
default=AssignmentSortField.ROLE,
273269
)
274-
order = serializers.ChoiceField(
275-
required=False,
276-
choices=[(e.value, e.name) for e in SortOrder],
277-
default=SortOrder.ASC,
278-
)
279270

280271

281272
class TeamMemberAssignmentSerializer(serializers.Serializer): # pylint: disable=abstract-method

openedx_authz/rest_api/v1/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121

2222
from openedx_authz import api
2323
from openedx_authz.api.data import RoleAssignmentData, SuperAdminAssignmentData
24-
from openedx_authz.api.users import get_superadmin_assignments, get_visible_specific_user_role_assignments_for_user
24+
from openedx_authz.api.users import (
25+
get_superadmin_assignments,
26+
get_visible_user_role_assignments_filtered_by_current_user,
27+
)
2528
from openedx_authz.api.utils import get_user_map
2629
from openedx_authz.constants import permissions
2730
from openedx_authz.rest_api.data import RoleOperationError, RoleOperationStatus
@@ -635,7 +638,7 @@ def get(self, request: HttpRequest, username: str) -> Response:
635638
# Retrieve superadmin assignments (django staff or superuser users), as they always have access to everything
636639
user_role_assignments += get_superadmin_assignments(user_external_keys=[username])
637640

638-
user_role_assignments += get_visible_specific_user_role_assignments_for_user(
641+
user_role_assignments += get_visible_user_role_assignments_filtered_by_current_user(
639642
user_external_key=username,
640643
orgs=query_params.get("orgs"),
641644
roles=query_params.get("roles"),

0 commit comments

Comments
 (0)