让所有用户在Liferay中获得角色

时间:2011-06-07 06:31:01

标签: java liferay liferay-6 dynamicquery

我是Liferay开发的新手,所以请随时指出我是否完全采用了错误的方法。

我正在尝试获取某个组内所有用户的DynamicQuery对象(我将使用此对象进一步过滤我将针对留言板执行的另一个查询)。 User接口似乎有一个我可以使用的roleIds属性,因为我已经知道我感兴趣的roleId。但我找不到正确的方法查询roleIds 是否包含某个值。

关于我想做什么的任何想法?

PS:我会直接询问确切的SQL查询,但我宁愿使用Liferay自己的连接池,也不需要做一些奇怪的扩展项目。

3 个答案:

答案 0 :(得分:8)

您不需要DynamicQuery。这些是您在Dirk指出的课程中寻找的方法:

long[] UserServiceUtil.getRoleUserIds(long roleId)

long[] UserLocalServiceUtil.getRoleUserIds(long roleId)
List<User> UserLocalServiceUtil.getRoleUsers(long roleId)

请记住XXXLocalServiceUtil类中的方法不检查当前用户的权限。

编辑:如果您正在寻找在给定社区中具有给定角色的所有用户:

long companyId= _X_; //Perhaps CompanyThreadLocal.getCompanyId() if you don't have it anywhere else?
Role role=RoleLocalServiceUtil.getRole(companyId, "Example Role");
Group group=GroupLocalServiceUtil.getGroup(companyId, "Example Community");
List<UserGroupRole> userGroupRoles = UserGroupRoleLocalServiceUtil.
                       getUserGroupRolesByGroupAndRole(groupId, role.getRoleId());
for(UserGroupRole userGroupRole:userGroupRoles){
    User oneUser=userGroupRole.getUser();
}

答案 1 :(得分:7)

访问liferay拥有对象的最简单方法是使用XXXServiceUtil类(例如RoleServiceUtil.getUserRoles(userId))。因此,您很少直接处理任何SQL。 RoleServiceUtilUserServiceUtil可能会满足您的需求。

答案 2 :(得分:0)

组织的角色存储在UserGroupRole表中,因此如果您想获得组织的所有者,则必须使用以下代码:

boolean isOrgOwner = 
    UserGroupRoleLocalServiceUtil.hasUserGroupRole(
        usr.getUserId(), 
        this.currentOrganization.getGroupId(), 
        RoleConstants.ORGANIZATION_OWNER);

如果要检索组织的所有组织所有者:

List<User> administrators = new LinkedList<>();

List<UserGroupRole> allOrganizationAdministrators = 
    UserGroupRoleLocalServiceUtil.getUserGroupRolesByGroupAndRole(
        this.currentOrganization.getGroupId(), roleId);

for (UserGroupRole userGroupRoleTemp : allOrganizationAdministrators) {
    administrators.add(userGroupRoleTemp.getUser());
}

干杯!