Получение всех пользователей с ролью в Liferay - PullRequest
5 голосов
/ 07 июня 2011

Я новичок в разработке Liferay в целом, поэтому не стесняйтесь указывать, если я поступаю совершенно неправильно.

Я пытаюсь получитьОбъект DynamicQuery для всех пользователей в определенной группе (я буду использовать этот объект для дальнейшей фильтрации другого запроса к доске объявлений).Интерфейс User, похоже, обладает свойством roleIds, которое я мог бы использовать, поскольку я уже знаю интересующий меня roleId. Но я не могу найти правильный способ запроса, если roleIds содержит определенное значение.

Любые идеи о том, что я хочу сделать?

PS: У меня был бы точный запрос SQL, который я мог бы задать напрямую, но я бы хотеллучше использовать собственный пул подключений Liferay, не прибегая к каким-то странным вещам ext проекта.

Ответы [ 3 ]

8 голосов
/ 28 июня 2011

Вам не нужен DynamicQuery.Это методы, которые вы ищете в классах, на которые указывает Дирк:

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();
}
7 голосов
/ 07 июня 2011

Самый простой способ получить доступ к собственным объектам liferays - использовать классы XXXServiceUtil (например, RoleServiceUtil.getUserRoles(userId)).Таким образом, вам редко приходится иметь дело с любым SQL напрямую.Либо RoleServiceUtil, либо UserServiceUtil может иметь то, что вам нужно.

0 голосов
/ 01 июля 2014

Роли Организации хранятся в таблице 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());
}

Ура!

...