Получение всех пользователей с ролью в Liferay

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

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

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

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


person Henrik Paul    schedule 07.06.2011    source источник


Ответы (3)


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

person Dirk    schedule 07.06.2011

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

long[] UserServiceUtil.getRoleUserIds(long roleId)

or

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();
}
person AdrianRM    schedule 28.06.2011
comment
Я хочу получить пользователей, которым назначены определенные роли организации, я получил идентификатор роли роли, но не могу получить пользователей, связанных с этим идентификатором роли. Я также понял, что записи находятся внутри USerGroupTable. Не могли бы вы мне помочь.... - person Prem; 20.03.2012
comment
Вы можете использовать UserLocalServiceUtil.getRoleUsers(roleId) - person Pankaj Kathiriya; 21.04.2013

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

Ваше здоровье!

person Francisco Javier Barrena    schedule 01.07.2014