当前位置:  开发笔记 > 编程语言 > 正文

以编程方式在Liferay中为用户添加角色

如何解决《以编程方式在Liferay中为用户添加角色》经验,为你挑选了0个好方法。

我需要在登录应用程序时为Liferay的用户分配角色.

我已经实现了实现"Authenticator"的自定义类的"authenticateByScreenName"方法中的所有逻辑.

示例代码:

public class ESBAuthenticator implements Authenticator{

      public int authenticateByScreenName(long companyId, String screenName, String password,
            Map headerMap, Map 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数据库的表并且它们已经更新,我的用户已经分配了"管理员"角色.但是,前端的门户网站不显示"Admin"选项.

在此输入图像描述

但如果我转到"我的帐户",请按"保存"按钮,注销并再次登录我可以使用管理员选项.

有人知道为什么会这样吗?我在分配角色后调用'updateUser()',它与'save'按钮不一样?

可能的解决方案: 我发现如果我清除在群集中缓存的内容,它可以正常工作.我在这篇文章中找到了它:

https://www.liferay.com/es/web/kamesh.sampath1/blog/-/blogs/how-to-clear-liferay-cache

添加以下行:

MultiVMPoolUtil.clear();

任何人都知道这是否是正确的解决方案?,当按下"my_account"页面中的"保存"按钮时,我无法找到liferay的内容.也许它清除这个缓存?我正在寻找与数据库功能同步,但找不到任何东西.似乎是如果一个列被更新,如果它被缓存,liferay不会使用它:(.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有