Skip to content

Commit acd632f

Browse files
committed
squash!: Apply PR suggestions
1 parent 59600eb commit acd632f

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
@@ -1128,7 +1128,7 @@ class SuperAdminAssignmentData:
11281128
staff/superuser and their access is not derived from a specific role assignment.
11291129
"""
11301130

1131-
subject: SubjectData = None
1131+
user: "User" = None
11321132
is_staff: bool = False
11331133
is_superuser: bool = False
11341134

openedx_authz/api/users.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
"get_user_role_assignments_filtered",
5656
"get_all_user_role_assignments_in_scope",
5757
"get_visible_role_assignments_for_user",
58-
"get_visible_specific_user_role_assignments_for_user",
58+
"get_visible_user_role_assignments_filtered_by_current_user",
5959
"is_user_allowed",
6060
"get_scopes_for_user_and_permission",
6161
"get_users_for_role_in_scope",
@@ -179,7 +179,7 @@ def get_user_role_assignments_for_role_in_scope(
179179
)
180180

181181

182-
def get_visible_specific_user_role_assignments_for_user(
182+
def get_visible_user_role_assignments_filtered_by_current_user(
183183
user_external_key: str,
184184
orgs: list[str] = None,
185185
roles: list[str] = None,
@@ -438,7 +438,7 @@ def get_superadmin_assignments(user_external_keys: list[str] | None = None) -> l
438438
for requested_user in requested_users:
439439
superadmin_assignments.append(
440440
SuperAdminAssignmentData(
441-
subject=UserData(external_key=requested_user.username),
441+
user=requested_user,
442442
is_staff=requested_user.is_staff,
443443
is_superuser=requested_user.is_superuser,
444444
)

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

@@ -294,21 +289,17 @@ class UserValidationAPIViewResponseSerializer(serializers.Serializer): # pylint
294289
summary = UserValidationSummarySerializer(help_text="Summary statistics for the validation operation")
295290

296291

297-
class ListTeamMemberAssignmentsSerializer(serializers.Serializer): # pylint: disable=abstract-method
292+
class ListTeamMemberAssignmentsSerializer(OrderMixin): # pylint: disable=abstract-method
298293
"""Serializer for listing team member assignments."""
299294

300295
orgs = CaseSensitiveCommaSeparatedListField(required=False, default=[])
301296
roles = CaseSensitiveCommaSeparatedListField(required=False, default=[])
297+
# Overriding sort_by from OrderMixin due to different choices and default value
302298
sort_by = serializers.ChoiceField(
303299
required=False,
304300
choices=[(e.value, e.name) for e in AssignmentSortField],
305301
default=AssignmentSortField.ROLE,
306302
)
307-
order = serializers.ChoiceField(
308-
required=False,
309-
choices=[(e.value, e.name) for e in SortOrder],
310-
default=SortOrder.ASC,
311-
)
312303

313304

314305
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
@@ -720,7 +723,7 @@ def get(self, request: HttpRequest, username: str) -> Response:
720723
# Retrieve superadmin assignments (django staff or superuser users), as they always have access to everything
721724
user_role_assignments += get_superadmin_assignments(user_external_keys=[username])
722725

723-
user_role_assignments += get_visible_specific_user_role_assignments_for_user(
726+
user_role_assignments += get_visible_user_role_assignments_filtered_by_current_user(
724727
user_external_key=username,
725728
orgs=query_params.get("orgs"),
726729
roles=query_params.get("roles"),

0 commit comments

Comments
 (0)