From c99368d885a736deb4b34574060b6f7b61a16cd7 Mon Sep 17 00:00:00 2001 From: imbeacon Date: Thu, 30 Mar 2023 09:52:04 +0300 Subject: [PATCH] Refactored --- .../server/controller/UserController.java | 13 ++++++++++++- .../thingsboard/server/dao/user/UserService.java | 2 +- .../thingsboard/server/dao/sql/user/JpaUserDao.java | 7 +++---- .../server/dao/sql/user/UserRepository.java | 5 ++--- .../org/thingsboard/server/dao/user/UserDao.java | 3 ++- .../server/dao/user/UserServiceImpl.java | 8 ++++---- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/UserController.java b/application/src/main/java/org/thingsboard/server/controller/UserController.java index 27af6f35da..f7b68c5d48 100644 --- a/application/src/main/java/org/thingsboard/server/controller/UserController.java +++ b/application/src/main/java/org/thingsboard/server/controller/UserController.java @@ -60,6 +60,7 @@ import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.common.data.security.UserSettings; import org.thingsboard.server.common.data.security.event.UserCredentialsInvalidationEvent; import org.thingsboard.server.common.data.security.model.JwtPair; +import org.thingsboard.server.dao.entity.EntityService; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.entitiy.user.TbUserService; import org.thingsboard.server.service.query.EntityQueryService; @@ -71,7 +72,9 @@ import org.thingsboard.server.service.security.permission.Resource; import org.thingsboard.server.service.security.system.SystemSecurityService; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -121,6 +124,9 @@ public class UserController extends BaseController { @Autowired private EntityQueryService entityQueryService; + @Autowired + private EntityService entityService; + @ApiOperation(value = "Get User (getUserById)", notes = "Fetch the User object based on the provided User Id. " + "If the user has the authority of 'SYS_ADMIN', the server does not perform additional checks. " + @@ -466,13 +472,18 @@ public class UserController extends BaseController { Alarm alarm = checkAlarmId(alarmEntityId, Operation.READ); SecurityUser currentUser = getCurrentUser(); TenantId tenantId = currentUser.getTenantId(); + CustomerId originatorCustomerId = entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator()).get(); PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); PageData pageData; if (Authority.TENANT_ADMIN.equals(currentUser.getAuthority())) { if (alarm.getCustomerId() == null) { pageData = userService.findTenantAdmins(tenantId, pageLink); } else { - pageData = userService.findTenantAndCustomerUsers(tenantId, alarm.getCustomerId(), pageLink); + ArrayList customerIds = new ArrayList<>(Collections.singletonList(new CustomerId(CustomerId.NULL_UUID))); + if (!CustomerId.NULL_UUID.equals(originatorCustomerId.getId())) { + customerIds.add(originatorCustomerId); + } + pageData = userService.findUsersByCustomerIds(tenantId, customerIds, pageLink); } } else { pageData = userService.findCustomerUsers(tenantId, alarm.getCustomerId(), pageLink); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java index 7b11f1c6ff..e1f16be1ed 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java @@ -77,7 +77,7 @@ public interface UserService extends EntityDaoService { PageData findCustomerUsers(TenantId tenantId, CustomerId customerId, PageLink pageLink); - PageData findTenantAndCustomerUsers(TenantId tenantId, CustomerId customerId, PageLink pageLink); + PageData findUsersByCustomerIds(TenantId tenantId, List customerIds, PageLink pageLink); void deleteCustomerUsers(TenantId tenantId, CustomerId customerId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java index 2bfab53b64..04b919b484 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java @@ -20,6 +20,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.User; +import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; @@ -103,16 +104,14 @@ public class JpaUserDao extends JpaAbstractSearchTextDao imple } @Override - public PageData findTenantAndCustomerUsers(UUID tenantId, UUID customerId, PageLink pageLink) { + public PageData findUsersByCustomerIds(UUID tenantId, List customerIds, PageLink pageLink) { return DaoUtil.toPageData( userRepository .findTenantAndCustomerUsers( tenantId, - customerId, + DaoUtil.toUUIDs(customerIds), Objects.toString(pageLink.getTextSearch(), ""), - NULL_UUID, DaoUtil.toPageable(pageLink))); - } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java index 9cd7029146..2f6866d45b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java @@ -45,12 +45,11 @@ public interface UserRepository extends JpaRepository { Pageable pageable); @Query("SELECT u FROM UserEntity u WHERE u.tenantId = :tenantId " + - "AND (:customerId IS NULL OR u.customerId IN (:customerId, :nullCustomerId)) " + + "AND u.customerId IN (:customerIds) " + "AND LOWER(u.searchText) LIKE LOWER(CONCAT('%', :searchText, '%'))") Page findTenantAndCustomerUsers(@Param("tenantId") UUID tenantId, - @Param("customerId") UUID customerId, + @Param("customerIds") Collection customerIds, @Param("searchText") String searchText, - @Param("nullCustomerId") UUID nullCustomerId, Pageable pageable); @Query("SELECT u FROM UserEntity u WHERE u.tenantId = :tenantId " + diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java index 2dee06db87..268e138b2f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java @@ -16,6 +16,7 @@ package org.thingsboard.server.dao.user; import org.thingsboard.server.common.data.User; +import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; @@ -90,7 +91,7 @@ public interface UserDao extends Dao, TenantEntityDao { * @param pageLink the page link * @return the list of user entities */ - PageData findTenantAndCustomerUsers(UUID tenantId, UUID customerId, PageLink pageLink); + PageData findUsersByCustomerIds(UUID tenantId, List customerIds, PageLink pageLink); PageData findAll(PageLink pageLink); diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java index 222298d124..fbc48894d0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java @@ -294,12 +294,12 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic } @Override - public PageData findTenantAndCustomerUsers(TenantId tenantId, CustomerId customerId, PageLink pageLink) { - log.trace("Executing findTenantAndCustomerUsers, tenantId [{}], customerId [{}], pageLink [{}]", tenantId, customerId, pageLink); + public PageData findUsersByCustomerIds(TenantId tenantId, List customerIds, PageLink pageLink) { + log.trace("Executing findTenantAndCustomerUsers, tenantId [{}], customerIds [{}], pageLink [{}]", tenantId, customerIds, pageLink); validateId(tenantId, INCORRECT_TENANT_ID + tenantId); validatePageLink(pageLink); - validateId(customerId, "Incorrect customerId " + customerId); - return userDao.findTenantAndCustomerUsers(tenantId.getId(), customerId.getId(), pageLink); + customerIds.forEach(customerId -> {validateId(customerId, "Incorrect customerId " + customerId);}); + return userDao.findUsersByCustomerIds(tenantId.getId(), customerIds, pageLink); } @Override