我是Liferay开发的新手,所以请随时指出我是否完全采用了错误的方法。
我正在尝试获取某个组内所有用户的DynamicQuery对象(我将使用此对象进一步过滤我将针对留言板执行的另一个查询)。 User
接口似乎有一个我可以使用的roleIds
属性,因为我已经知道我感兴趣的roleId
。但我找不到正确的方法查询roleIds
是否包含某个值。
关于我想做什么的任何想法?
PS:我会直接询问确切的SQL查询,但我宁愿使用Liferay自己的连接池,也不需要做一些奇怪的扩展项目。
答案 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。 RoleServiceUtil
或UserServiceUtil
可能会满足您的需求。
答案 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());
}
干杯!