6

一般来说,我是 Liferay 开发的新手,所以请随时指出我是否以完全错误的方式处理事情。

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

关于我想做的任何想法?

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

4

3 回答 3

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();
}
于 2011-06-28T16:45:52.880 回答
7

访问 liferays 自己的对象的最简单方法是使用XXXServiceUtil类(例如RoleServiceUtil.getUserRoles(userId))。因此,您很少需要直接处理任何 SQL。要么 要么 可能有你需要的RoleServiceUtil东西UserServiceUtil

于 2011-06-07T10:11:14.537 回答
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());
}

干杯!

于 2014-07-01T13:48:08.293 回答