Devo assegnare ruoli ai miei utenti di Liferay quando accedono all'applicazione.Aggiungere ruolo all'utente in Liferay a livello di programmazione
ho implementato tutta la logica in metodo di una classe personalizzata che implementa 'Authenticator' il 'authenticateByScreenName'.
codice Esempio:
public class ESBAuthenticator implements Authenticator{
public int authenticateByScreenName(long companyId, String screenName, String password,
Map<String, String[]> headerMap, Map<String, String[]> parameterMap)
setProfile(companyId, screenname);
return 1;
}
public static void setProfile(long companyId, long userId){
User user = UserLocalServiceUtil.getUser(userId);
Role liferayRole = RoleLocalServiceUtil.fetchRole(companyId, "Administrator");
RoleLocalServiceUtil.addUserRole(user.getUserId(), liferayRole.getRoleId());
UserLocalServiceUtil.updateUser(user);
}
}
Quando accedo-in, a quanto pare funziona, verifico le tabelle del database Liferay e sono aggiornati, il mio utente ha ruolo di "amministratore" assegnato. Tuttavia, il portale nel front-end non mostra l'opzione "Admin".
ma se vado a 'Il mio conto', premere il pulsante 'salva', log-out e log-in ancora una volta ho le opzioni disponibili Admin.
Qualcuno sa perché questo accade ?, Sto chiamando 'updateUser()' dopo aver assegnato il ruolo, non è lo stesso del pulsante 'salva'?
Soluzione possibile: Ho trovato che Se cancello il contenuto memorizzato nella cache attraverso il cluster funziona correttamente. L'ho trovato in questo post:
https://www.liferay.com/es/web/kamesh.sampath1/blog/-/blogs/how-to-clear-liferay-cache
Aggiungere la seguente riga:
MultiVMPoolUtil.clear();
Qualcuno sa se è questa la soluzione giusta ?, non riesco a trovare quello che fa Liferay quando il "salva "viene premuto il pulsante dalla pagina" my_account ". Forse cancellare questa cache ?. Stavo cercando una sincronizzazione con la funzione di database ma non ho trovato nulla. Sembra essere che se una colonna viene aggiornata, Liferay non usarlo se è memorizzato nella cache :(
È pre-autenticatore o post-autenticatore? Credo che se il suo post-autenticatore e il suo contesto utente non verranno aggiornati con i privilegi di amministratore. –
È pre-autenticatore: S. – dgcipp
Prova invece 'UserLocalServiceUtil.addRoleUser (long roleId, long userId)'! –