6363
6464OBJECTS_WITH_PERMISSIONS = (_GLOBAL , _PROJECTS , _TEMPLATES , _QG , _QP , _APPS , _PORTFOLIOS )
6565PERMISSION_TYPES = ("groups" , "users" )
66- NO_PERMISSIONS = []
66+ NO_PERMISSIONS = { p : {} for p in PERMISSION_TYPES }
6767
6868MAX_PERMS = 100
6969
@@ -85,9 +85,15 @@ def __str__(self) -> str:
8585 def to_json (self , perm_type : Optional [str ] = None ) -> types .JsonPermissions :
8686 """Converts a permission object to JSON"""
8787 order = PROJECT_PERMISSIONS if self .concerned_object else ENTERPRISE_GLOBAL_PERMISSIONS
88- perms += [{"permissions" : encode (p ["permissions" ], order ), ** p } for p in self .permissions ]
89- if perm_type :
90- perms = [p for p in perms if perm_type [:- 1 ] in p .keys ()]
88+ perms = []
89+ for p in normalize (perm_type ):
90+ if p not in self .permissions or len (self .permissions [p ]) == 0 :
91+ continue
92+ for k , v in self .permissions .get (p , {}).items ():
93+ if not v or len (v ) == 0 :
94+ continue
95+ perms += [{p [:- 1 ]: k , "permissions" : encode (v , order )}]
96+ log .info ("RETURN PERM = %s" , utilities .json_dump (perms ))
9197 return perms if len (perms ) > 0 else None
9298
9399 def export (self ) -> types .ObjectJsonRepr :
@@ -258,7 +264,7 @@ def count(self, perm_type: Optional[str] = None, perm_filter: Optional[list[str]
258264 return perm_counter
259265
260266 def _get_api (self , api : str , perm_type : str , ret_field : str , ** extra_params ) -> types .JsonPermissions :
261- perms = []
267+ perms = {}
262268 params = extra_params .copy ()
263269 page , nbr_pages = 1 , 1
264270 counter = 0
@@ -270,7 +276,7 @@ def _get_api(self, api: str, perm_type: str, ret_field: str, **extra_params) ->
270276 # perms.update({p[ret_field]: p["permissions"] for p in data[perm_type]})
271277 for p in data [perm_type ]:
272278 if len (p ["permissions" ]) > 0 :
273- perms . append ({ perm_type [: - 1 ]: p [ret_field ], "permssions" : p ["permissions" ]})
279+ perms [ p [ret_field ]] = p ["permissions" ]
274280 counter = 0
275281 else :
276282 counter += 1
@@ -381,22 +387,23 @@ def diffarray(perms_1: list[str], perms_2: list[str]) -> list[str]:
381387
382388def white_list (perms : types .JsonPermissions , allowed_perms : list [str ]) -> types .JsonPermissions :
383389 """Returns permissions filtered from a white list of allowed permissions"""
384- resulting_perms = []
385- for perm in perms .items ():
386- k = "users" if "users" in perm else "groups"
387- log .info ("PERM = %s" , str (perm ))
388- v = [p for p in perm ["permissions" ] if p in allowed_perms ]
389- resulting_perms .append ({k : perm [k ], "permissions" : v })
390+ resulting_perms = {}
391+ for perm_type , sub_perms in perms .items ():
392+ # if perm_type not in PERMISSION_TYPES:
393+ # continue
394+ resulting_perms [perm_type ] = {}
395+ for user_or_group , original_perms in sub_perms .items ():
396+ resulting_perms [perm_type ][user_or_group ] = [p for p in original_perms if p in allowed_perms ]
390397 return resulting_perms
391398
392399
393400def black_list (perms : types .JsonPermissions , disallowed_perms : list [str ]) -> types .JsonPermissions :
394401 """Returns permissions filtered after a black list of disallowed permissions"""
395- resulting_perms = []
396- for perm in perms :
397- k = "users" if "users" in perm else "groups"
398- v = [ p for p in perm [ "permissions" ] if p not in disallowed_perms ]
399- resulting_perms . append ({ k : perm [ k ], "permissions" : v })
402+ resulting_perms = {}
403+ for perm_type , sub_perms in perms . items () :
404+ resulting_perms [ perm_type ] = {}
405+ for user_or_group , original_perms in sub_perms . items ():
406+ resulting_perms [ perm_type ][ user_or_group ] = [ p for p in original_perms if p not in disallowed_perms ]
400407 return resulting_perms
401408
402409
0 commit comments