我需要的角色,當他們登錄應用程序分配給我的Liferay的用戶。添加角色到用戶的編程Liferay的
我已經實現所有的邏輯在「authenticateByScreenName」實現「身份驗證」的自定義類的方法。
示例代碼:
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);
}
}
當我登錄,顯然它的工作原理,我檢查的Liferay數據庫的表和它們被更新,我的用戶「管理員」的角色分配。但是,前端的門戶網站不顯示「管理員」選項。
,但如果我去「我的賬戶」,按「保存」按鈕,註銷和登錄再次我有管理員選項可獲取。
任何人都知道爲什麼會發生這種情況?我在分配角色後調用'updateUser()',它與'save'按鈕不一樣嗎?
可能的解決方案: 我發現如果我清除羣集中緩存的內容,它可以正常工作。我發現它在這個帖子:
https://www.liferay.com/es/web/kamesh.sampath1/blog/-/blogs/how-to-clear-liferay-cache
添加以下行:
MultiVMPoolUtil.clear();
任何人都知道,如果這是正確的解決方案?我找不到什麼呢Liferay的時候,「保存「按鈕從」my_account「頁面被按下。也許它清除了這個緩存?我正在尋找與數據庫功能同步但找不到任何東西。這似乎是,如果一列被更新,Liferay的不使用它,如果它的緩存:(
它是預先驗證者還是後驗證者?我相信,如果它的後驗證程序,然後用戶上下文將不會更新與管理員權限。 –
它是預認證者:S。 – dgcipp
請改用'UserLocalServiceUtil.addRoleUser(long roleId,long userId)'! –