Message Boards

Leggere tutti i membri di un ruolo

thumbnail
Marco Azzalini, modified 7 Years ago.

Leggere tutti i membri di un ruolo

Regular Member Posts: 146 Join Date: 11/18/14 Recent Posts
Ciao, di recente mi sono imbattuto in un problema che ritenevo banale ma che mi sta facendo un po' impazzire.
Nel mio progetto ho creato degli UserGroup e questi li ho inseriti in altrettanti Ruoli (standard, non di sito) e fin qui tutto bene, nel senso che gli utenti ereditano tutti i permessi come previsto.
Il problema nasce quando devo leggere via API quali sono i membri di un certo ruolo! Il metodo
UserLocalServiceUtil.getRoleUsers(role.getRoleId())

mi restituisce una lista dei soli membri diretti emoticon
Il mio problema invece è che non riesco a trovare un modo per capire quali sono i gruppi che appartengono a quel ruolo per poi iterativamente analizzarne i membri.
Un modo ci dev'essere perché dal pannello di controllo (all'interno di un ruolo) quei gruppi vengono elencati ma dalle API io non riesco a trovare una strada.

Qualcuno sa aiutarmi?

grazie mille
Marco
thumbnail
Marco Azzalini, modified 7 Years ago.

RE: Leggere tutti i membri di un ruolo (Answer)

Regular Member Posts: 146 Join Date: 11/18/14 Recent Posts
RISOLTO ! emoticon
Ho seguito la mia idea ed ho cercato nel codice sorgente di Liferay. Una volta capito è banale, ma... bisognava capirlo emoticon
In pratica bisogna sapere che nel metodo search del Service, si può passare l'id del ruolo con: userGroupParams.put("userGroupsRoles", new Long(role.getRoleId() ;-)
Al solito, nei javadoc di questo non c'è traccia purtroppo e quindi bisogna scoprirselo guardando i sorgenti (che per fortuna ci sono!).
Ad ogni modo, se a qualcuno può servire, qui c'è il metodo completo che estrae utenti diretti ed indiretti da un ruolo


	public static List<user> getAllUsersInRole(Role role) throws SystemException, PortalException {
	   List<user> users = new ArrayList<user>();
           List<user> usersWithoutDuplicates = new ArrayList<user>();
	   List<usergroup> userGroupsInRole;
	   
           LinkedHashMap<string, object> userGroupParams = new LinkedHashMap<string, object>();
	   userGroupParams.put("userGroupsRoles", new Long(role.getRoleId()));
	   OrderByComparator obc=null;
	   
           userGroupsInRole=UserGroupLocalServiceUtil.search(getCompanyId(), "", userGroupParams, QueryUtil.ALL_POS,QueryUtil.ALL_POS, obc); 
	   //aggiungiamo i membri di ogni gruppo...
	   for (UserGroup userGroup : userGroupsInRole) {
		   users.addAll(UserLocalServiceUtil.getUserGroupUsers(userGroup.getUserGroupId()));
	   }
           //... e alla fine anche i membri diretti
	   users.addAll(UserLocalServiceUtil.getRoleUsers(role.getRoleId()));

            //ripuliamo da eventuali doppioni...
	   for (User u:users) {
		   if (usersWithoutDuplicates.indexOf(u)&lt;0) {
			   usersWithoutDuplicates.add(u);
		   }
	   }
	   // ... ed ordiniamo per cognome
	   Collections.sort(usersWithoutDuplicates, new java.util.Comparator<user>() {
			public int compare(User u1, User u2) {
				return u1.getLastName().compareToIgnoreCase(u2.getLastName());
			}		   
	   });
	   
	   return usersWithoutDuplicates;
	}
</user></string,></string,></usergroup></user></user></user></user></user>
thumbnail
Daniele Baggio, modified 7 Years ago.

RE: Leggere tutti gli utenti di un ruolo

Expert Posts: 336 Join Date: 12/5/08 Recent Posts
Bella, utile, thx.