Ich muss meinen Liferay-Benutzern Rollen zuweisen, wenn sie sich in der Anwendung anmelden.Rolle Benutzer in Liferay programmgesteuert hinzufügen
Ich habe implementiert die gesamte Logik in der ‚authenticateByScreenName‘ Methode einer benutzerdefinierten Klasse, die ‚Authenticator‘ implementiert.
Beispielcode:
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);
}
}
Wenn ich log-in, anscheinend funktioniert es, ich Prüftabellen der liferay Datenbank und werden aktualisiert, mein Benutzer hat „Administrator“ Rolle zugewiesen. Das Portal im Front-End zeigt jedoch nicht die Option "Admin".
Aber wenn ich auf 'Mein Konto' gehen, drücken Sie die Schaltfläche 'Speichern', log-out und melden Sie sich wieder habe ich die Admin-Optionen availables.
Wer weiß, warum dies passiert ?, Ich rufe "updateUser()" nach der Rolle zuweisen, ist es nicht das gleiche wie die Schaltfläche "Speichern"?
Mögliche Lösung: Ich habe festgestellt, dass, wenn ich den Inhalt über den Cluster zwischengespeichert löschen, funktioniert es gut. Ich fand es in diesem Beitrag:
https://www.liferay.com/es/web/kamesh.sampath1/blog/-/blogs/how-to-clear-liferay-cache
Fügen Sie die folgende Zeile ein:
MultiVMPoolUtil.clear();
Wer weiß, ob dies die richtige Lösung ist ?, Ich kann nicht finden, was liferay tut, wenn die „save "Schaltfläche von der Seite" my_account "wird gedrückt. Vielleicht löschen Sie diesen Cache ?. Ich suchte nach einer Synchronisation mit der Datenbankfunktion, konnte aber nichts finden. Es scheint zu sein, dass, wenn eine Spalte aktualisiert wird, liferay es nicht verwenden, wenn es zwischengespeichert :(
Ist es Pre-Authenticator oder Post-Authenticator? Ich glaube, wenn sein Post-Authenticator dann Benutzer-Kontext nicht mit Administratorrechten aktualisiert wird. –
Es ist Pre-Authenticator: S. – dgcipp
Versuchen Sie 'UserLocalServiceUtil.addRoleUser (long roleId, long userId)' stattdessen! –