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