@@ -267,32 +267,35 @@ def _get_related(self, obj) -> dict[str, str]:
267267 def summarize_role_definition (role_definition ):
268268 return {"name" : role_definition .name , "url" : get_url_for_object (role_definition )}
269269
270- def get_object_role_assignments (self , actor ):
271- obj = self .context .get ("related_object" )
272- permission = self .context .get ("permission" )
273- ct = self .context .get ("content_type" )
274-
275- if permission :
276- assignment_qs = assignment_qs_user_to_obj_perm (actor , obj , permission )
277- else :
278- assignment_qs = assignment_qs_user_to_obj (actor , obj )
279-
280- team_ct = DABContentType .objects .get_for_model (get_team_model ())
281-
270+ @staticmethod
271+ def summarize_assignment_list (assignment_qs , obj_ct ):
282272 assignment_list = []
273+ team_ct = DABContentType .objects .get_for_model (get_team_model ())
283274 for assignment in assignment_qs .distinct ():
284275 if assignment .content_type_id is None :
285276 perm_type = "global"
286277 elif assignment .content_type_id == team_ct .pk :
287278 perm_type = "team"
288- elif assignment .content_type_id == ct .pk :
279+ elif assignment .content_type_id == obj_ct .pk :
289280 perm_type = "direct"
290281 else :
291282 perm_type = "indirect"
292- assignment_list .append ({"type" : perm_type , "role_definition" : self .summarize_role_definition (assignment .role_definition )})
283+ assignment_list .append ({"type" : perm_type , "role_definition" : AccessListMixin .summarize_role_definition (assignment .role_definition )})
293284
294285 return assignment_list
295286
287+ def get_object_role_assignments (self , actor ):
288+ obj = self .context .get ("related_object" )
289+ permission = self .context .get ("permission" )
290+ ct = self .context .get ("content_type" )
291+
292+ if permission :
293+ assignment_qs = assignment_qs_user_to_obj_perm (actor , obj , permission )
294+ else :
295+ assignment_qs = assignment_qs_user_to_obj (actor , obj )
296+
297+ return self .summarize_assignment_list (assignment_qs , ct )
298+
296299 def get_url (self , obj ) -> str :
297300 return get_url_for_object (obj )
298301
@@ -312,7 +315,26 @@ class TeamAccessListMixin(AccessListMixin, AbstractCommonModelSerializer):
312315
313316
314317class UserAccessAssignmentSerializer (RoleUserAssignmentSerializer ):
315- pass
318+ intermediary_roles = serializers .SerializerMethodField ()
319+
320+ class Meta (RoleUserAssignmentSerializer .Meta ):
321+ fields = RoleUserAssignmentSerializer .Meta .fields + ['intermediary_roles' ]
322+
323+ def get_intermediary_roles (self , assignment ):
324+ team_ct = DABContentType .objects .get_for_model (get_team_model ())
325+
326+ permission = self .context .get ("permission" )
327+ if assignment .content_type != team_ct :
328+ return []
329+ team = assignment .content_object
330+ obj = self .context .get ("related_object" )
331+
332+ if permission :
333+ assignment_qs = assignment_qs_user_to_obj_perm (team , obj , permission )
334+ else :
335+ assignment_qs = assignment_qs_user_to_obj (team , obj )
336+
337+ return AccessListMixin .summarize_assignment_list (assignment_qs , self .context .get ("content_type" ))
316338
317339
318340class TeamAccessAssignmentSerializer (RoleTeamAssignmentSerializer ):
0 commit comments