|
Re: Recuperer en python les memberes ayant acces à un espace.: msg#00363web.zope.cps.general.french
jonathan briffaut wrote: En effet je recherche le même effet que cette fonction de lister tous les membres ayant un role dans un espace de travail J'avais écrit ce script pour un projet: cf PJ A adapter en fonction des besoins. PS, il n'extrait pas les membres des groupes. -- Olivier ##parameters=roles_filter=None, ptype_filter=True, REQUEST=None # $Id: getUsersByLocalRoles.py 23056 2005-06-14 18:15:50Z ogrisel $ """Return a dictionary of user's (id, type, display_name) sorted by localroles The localroles are computed according to the current context. - id is a string like 'user:login' - type is 'user' or 'group' - display_name is the user fullname or the group name (with i18n support) """ if REQUEST is not None: return mtool = context.portal_membership mdir = context.portal_directories.members cpsmcat = context.Localizer.default lroles = mtool.getMergedLocalRoles(context) # Building the filters filters = [] if ptype_filter: ptype = context.portal_type if ptype in ('Chat', 'CPSForum'): ptype = context.aq_parent.portal_type if ptype == 'MetaSection': # Use the same localroles names for Meta and Sections ptype = 'Section' filters.append(lambda r: r.startswith(ptype)) if roles_filter is not None: filters.append(lambda r: r in roles_filter) def compound_filter(role, test_list): for test in test_list: if not test(role): return False return True # Filtering if filters: for user, roles in lroles.items(): # Applying the filters lroles[user] = [ role for role in roles if compound_filter(role, filters) ] # Removing users with no roles if not lroles[user]: del lroles[user] # Computing the display_names (only once for each user) display_names = {} for user in lroles.keys(): type, uid = user.split(':', 1) if type == 'user': display_names[user] = mdir.getEntry(uid, {}).get('fullname') if type == 'group': if uid.startswith('role:'): display_names[user] = cpsmcat(uid) else: display_names[user] = uid # Cross-sorting the results users_by_roles = {} for user, roles in lroles.items(): type, id = user.split(':', 1) display_name = display_names[user] if display_name is None: continue for role in roles: users = users_by_roles.get(role, []) users.append((id, type, display_name)) users_by_roles[role] = users return users_by_roles _______________________________________________ cps-users-fr Adresse de la liste : cps-users-fr-FQDHc1wsLCVb90+sfpvX0g@xxxxxxxxxxxxxxxx Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr> |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: Installation DEBIAN Suite: 00363, Rakotomandimby (R12y) Mihamina |
|---|---|
| Next by Date: | RE: RE: Re: Installation DEBIAN Suite: 00363, Gustav TRENNERT |
| Previous by Thread: | RE: [CPS-users-fr] Recuperer en python les memberes ayant acces à un espace.i: 00363, jonathan briffaut |
| Next by Thread: | Mettre en place une GED: 00363, Nicolas Liprey |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |