Message Boards
Leggere tutti i membri di un ruolo
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
mi restituisce una lista dei soli membri diretti
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
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
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
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 !
Ho seguito la mia idea ed ho cercato nel codice sorgente di Liferay. Una volta capito è banale, ma... bisognava capirlo
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
Ho seguito la mia idea ed ho cercato nel codice sorgente di Liferay. Una volta capito è banale, ma... bisognava capirlo
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)<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>
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.