1515from rest_framework .views import APIView
1616
1717from openedx_authz import api
18+ from openedx_authz .api .data import ScopeData
19+ from openedx_authz .engine .enforcer import AuthzEnforcer
20+ from openedx_authz .engine .filter import Filter
1821from openedx_authz .rest_api .data import RoleOperationError , RoleOperationStatus
1922from openedx_authz .rest_api .decorators import authz_permissions , view_auth_classes
2023from openedx_authz .rest_api .utils import (
@@ -103,13 +106,16 @@ def post(self, request: HttpRequest) -> Response:
103106 """Validate one or more permissions for the authenticated user."""
104107 serializer = PermissionValidationSerializer (data = request .data , many = True )
105108 serializer .is_valid (raise_exception = True )
109+ data = serializer .validated_data
110+
111+ AuthzEnforcer .get_enforcer ().load_policy ()
106112
107113 username = request .user .username
108114 response_data = []
109- for perm in serializer . validated_data :
115+ for permission in data :
110116 try :
111- action = perm ["action" ]
112- scope = perm ["scope" ]
117+ action = permission ["action" ]
118+ scope = permission ["scope" ]
113119 allowed = api .is_user_allowed (username , action , scope )
114120 response_data .append ({"action" : action , "scope" : scope , "allowed" : allowed })
115121 except ValueError as e :
@@ -257,6 +263,9 @@ def get(self, request: HttpRequest) -> Response:
257263 serializer .is_valid (raise_exception = True )
258264 query_params = serializer .validated_data
259265
266+ flt = Filter (v2 = [ScopeData (external_key = query_params ["scope" ]).namespaced_key ])
267+ AuthzEnforcer .get_enforcer ().load_filtered_policy (flt )
268+
260269 user_role_assignments = api .get_all_user_role_assignments_in_scope (query_params ["scope" ])
261270 usernames = {assignment .subject .username for assignment in user_role_assignments }
262271 context = {"user_map" : get_user_map (usernames )}
@@ -282,15 +291,16 @@ def put(self, request: HttpRequest) -> Response:
282291 """Assign multiple users to a specific role within a scope."""
283292 serializer = AddUsersToRoleWithScopeSerializer (data = request .data )
284293 serializer .is_valid (raise_exception = True )
294+ data = serializer .validated_data
295+
296+ AuthzEnforcer .get_enforcer ().load_policy ()
285297
286- role = serializer .validated_data ["role" ]
287- scope = serializer .validated_data ["scope" ]
288298 completed , errors = [], []
289- for user_identifier in serializer . validated_data ["users" ]:
299+ for user_identifier in data ["users" ]:
290300 response_dict = {"user_identifier" : user_identifier }
291301 try :
292302 user = get_user_by_username_or_email (user_identifier )
293- result = api .assign_role_to_user_in_scope (user .username , role , scope )
303+ result = api .assign_role_to_user_in_scope (user .username , data [ " role" ], data [ " scope" ] )
294304 if result :
295305 response_dict ["status" ] = RoleOperationStatus .ROLE_ADDED
296306 completed .append (response_dict )
@@ -327,17 +337,18 @@ def put(self, request: HttpRequest) -> Response:
327337 @authz_permissions (["manage_library_team" ])
328338 def delete (self , request : HttpRequest ) -> Response :
329339 """Remove multiple users from a specific role within a scope."""
340+ AuthzEnforcer .get_enforcer ().load_policy ()
341+
330342 serializer = RemoveUsersFromRoleWithScopeSerializer (data = request .query_params )
331343 serializer .is_valid (raise_exception = True )
344+ data = serializer .validated_data
332345
333- role = serializer .validated_data ["role" ]
334- scope = serializer .validated_data ["scope" ]
335346 completed , errors = [], []
336- for user_identifier in serializer . validated_data ["users" ]:
347+ for user_identifier in data ["users" ]:
337348 response_dict = {"user_identifier" : user_identifier }
338349 try :
339350 user = get_user_by_username_or_email (user_identifier )
340- result = api .unassign_role_from_user (user .username , role , scope )
351+ result = api .unassign_role_from_user (user .username , data [ " role" ], data [ " scope" ] )
341352 if result :
342353 response_dict ["status" ] = RoleOperationStatus .ROLE_REMOVED
343354 completed .append (response_dict )
@@ -434,6 +445,8 @@ def get(self, request: HttpRequest) -> Response:
434445 serializer .is_valid (raise_exception = True )
435446 query_params = serializer .validated_data
436447
448+ AuthzEnforcer .get_enforcer ().load_policy ()
449+
437450 generic_scope = get_generic_scope (query_params ["scope" ])
438451 roles = api .get_role_definitions_in_scope (generic_scope )
439452 response_data = []
0 commit comments