如何通过 Liferay API 获取组织和站点角色列表

Posted

技术标签:

【中文标题】如何通过 Liferay API 获取组织和站点角色列表【英文标题】:How to get the List of organization and site roles list by Liferay API 【发布时间】:2019-01-28 14:21:50 【问题描述】:

我需要获取我的 Liferay 中存在的组织角色和站点角色的列表。

我使用以下代码获取站点角色和组织角色

List<UserGroupRole> list =UserGroupRoleLocalServiceUtil.getUserGroupRoles(0,UserGroupRoleLocalServiceUtil.getUserGroupRolesCount());
                                  System.out.println("UserGroupRole list size  "+list.size());
                                  System.out.println("getUserGroupRolesCount  "+UserGroupRoleLocalServiceUtil.getUserGroupRolesCount());                        

                                  for (UserGroupRole roleObj : list) 

                                         if(roleObj != null && roleObj.getRole() != null )
                                                if (RoleConstants.TYPE_ORGANIZATION==roleObj.getRole().getType() && RoleConstants.ORGANIZATION_ADMINISTRATOR.equals(roleObj.getRole().getName())) 
                                                       System.out.println("Role Name " + roleObj.getRole().getName() + " Role Id "+ roleObj.getRole().getRoleId() + " Role type " + roleObj.getRole().getType());

                                                       session.setAttribute(LoginConstants.ORGANIZATION_ADMINISTRATOR_ROLE_ID, roleObj.getRole().getRoleId(),PortletSession.APPLICATION_SCOPE);

                                                        else 
                                                if (RoleConstants.TYPE_ORGANIZATION==roleObj.getRole().getType() && RoleConstants.ORGANIZATION_OWNER.equals(roleObj.getRole().getName())) 
                                                       System.out.println("Role Name " + roleObj.getRole().getName() + " Role Id "+ roleObj.getRole().getRoleId() + " Role type " + roleObj.getRole().getType());

                                                       session.setAttribute(LoginConstants.ORGANIZATION_OWNER_ROLE_ID, roleObj.getRole().getRoleId(),PortletSession.APPLICATION_SCOPE);

                                                        else
                                                if (RoleConstants.TYPE_SITE==roleObj.getRole().getType() && RoleConstants.SITE_ADMINISTRATOR.equals(roleObj.getRole().getName())) 
                                                       System.out.println("Role Name " + roleObj.getRole().getName() + " Role Id "+ roleObj.getRole().getRoleId() + " Role type " + roleObj.getRole().getType());

                                                       session.setAttribute(LoginConstants.SITE_ADMINISTRATOR_ROLE_ID, roleObj.getRole().getRoleId(),PortletSession.APPLICATION_SCOPE);

                                                        else 
                                                if (RoleConstants.TYPE_SITE==roleObj.getRole().getType() && RoleConstants.SITE_OWNER.equals(roleObj.getRole().getName())) 
                                                       System.out.println("Role Name " + roleObj.getRole().getName() + " Role Id "+ roleObj.getRole().getRoleId() + " Role type " + roleObj.getRole().getType());

                                                       session.setAttribute(LoginConstants.SITE_OWNER_ROLE_ID, roleObj.getRole().getRoleId(),PortletSession.APPLICATION_SCOPE);

                                                
                                         
                                  

我期待以下 4 个角色的详细信息(角色 ID) - 组织管理员 - 组织所有者 - 站点管理员 - 网站所有者

但是我没有得到“站点管理员”角色详细信息,我没有得到的原因是这个角色没有分配给任何用户,因此没有“UserGroupRole” 映射存在相同的。 UserGroupRole 列表大小为 2776。

当我为用户分配“站点管理员”角色时,我能够从上面的代码中获取它,并且 UserGroupRole 列表的大小为 2777。

有没有其他方法可以让我获得所有组织角色和站点角色的列表。 请帮助我,谢谢。

【问题讨论】:

但是你为什么只使用 UserGroupRole 查询呢? 嗨@DanieleBaggio..请您建议一个替代解决方案以获得Liferay中存在的所有组织角色和站点角色的列表 我认为 RoleLocalServiceUtil.getRoles(companyId) 将是正确的方式...... 缩进 56 个字符,只有 1/3 的代码可见而不在桌面视图中滚动?我敢打赌你可以做得更好......请编辑你的问题以使代码可读。 【参考方案1】:

感谢@Daniele Baggio

我可以得到以下4个角色

组织管理员 组织所有者 网站管理员 网站所有者

角色 orgAdmin=RoleLocalServiceUtil.getRole(companyId,RoleConstants.ORGANIZATION_ADMINISTRATOR);

角色 orgOwner=RoleLocalServiceUtil.getRole(companyId,RoleConstants.ORGANIZATION_OWNER); 角色 siteAdmin=RoleLocalServiceUtil.getRole(companyId,RoleConstants.SITE_ADMINISTRATOR); 角色 siteOwner=RoleLocalServiceUtil.getRole(companyId, RoleConstants.SITE_OWNER);

【讨论】:

以上是关于如何通过 Liferay API 获取组织和站点角色列表的主要内容,如果未能解决你的问题,请参考以下文章

Liferay 7:是不是可以自动从链接站点获取图像到站点地图?

Liferay 获取组织角色的所有用户(按组织角色名称)

Liferay 7:获取组织自定义字段时未初始化 PermissionChecker

我如何在 liferay 7.3.6 中将(用户和组织)作为 portlet

在 liferay 中以编程方式创建站点(组)

Liferay 6.1中如何从用户组继承站点角色权限给他们的成员?