我需要的角色,当他们登录应用程序分配给我的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)'! –