Merge pull request #9558 from YevhenBondarenko/fix/alarm-assign
fixed getUsersForAssign if originator was removed
This commit is contained in:
commit
520a203d27
@ -105,6 +105,7 @@ import static org.thingsboard.server.controller.ControllerConstants.USER_ID_PARA
|
|||||||
import static org.thingsboard.server.controller.ControllerConstants.USER_SORT_PROPERTY_ALLOWABLE_VALUES;
|
import static org.thingsboard.server.controller.ControllerConstants.USER_SORT_PROPERTY_ALLOWABLE_VALUES;
|
||||||
import static org.thingsboard.server.controller.ControllerConstants.USER_TEXT_SEARCH_DESCRIPTION;
|
import static org.thingsboard.server.controller.ControllerConstants.USER_TEXT_SEARCH_DESCRIPTION;
|
||||||
import static org.thingsboard.server.controller.ControllerConstants.UUID_WIKI_LINK;
|
import static org.thingsboard.server.controller.ControllerConstants.UUID_WIKI_LINK;
|
||||||
|
import static org.thingsboard.server.dao.entity.BaseEntityService.NULL_CUSTOMER_ID;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RestController
|
@RestController
|
||||||
@ -439,32 +440,28 @@ public class UserController extends BaseController {
|
|||||||
@RequestParam(required = false) String sortProperty,
|
@RequestParam(required = false) String sortProperty,
|
||||||
@ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES)
|
@ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES)
|
||||||
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
|
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
|
||||||
try {
|
checkParameter("alarmId", strAlarmId);
|
||||||
checkParameter("alarmId", strAlarmId);
|
AlarmId alarmEntityId = new AlarmId(toUUID(strAlarmId));
|
||||||
AlarmId alarmEntityId = new AlarmId(toUUID(strAlarmId));
|
Alarm alarm = checkAlarmId(alarmEntityId, Operation.READ);
|
||||||
Alarm alarm = checkAlarmId(alarmEntityId, Operation.READ);
|
SecurityUser currentUser = getCurrentUser();
|
||||||
SecurityUser currentUser = getCurrentUser();
|
TenantId tenantId = currentUser.getTenantId();
|
||||||
TenantId tenantId = currentUser.getTenantId();
|
CustomerId originatorCustomerId = entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator()).orElse(NULL_CUSTOMER_ID);
|
||||||
CustomerId originatorCustomerId = entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator()).get();
|
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
|
||||||
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
|
PageData<User> pageData;
|
||||||
PageData<User> pageData;
|
if (Authority.TENANT_ADMIN.equals(currentUser.getAuthority())) {
|
||||||
if (Authority.TENANT_ADMIN.equals(currentUser.getAuthority())) {
|
if (alarm.getCustomerId() == null) {
|
||||||
if (alarm.getCustomerId() == null) {
|
pageData = userService.findTenantAdmins(tenantId, pageLink);
|
||||||
pageData = userService.findTenantAdmins(tenantId, pageLink);
|
|
||||||
} else {
|
|
||||||
ArrayList<CustomerId> 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 {
|
} else {
|
||||||
pageData = userService.findCustomerUsers(tenantId, alarm.getCustomerId(), pageLink);
|
ArrayList<CustomerId> customerIds = new ArrayList<>(Collections.singletonList(NULL_CUSTOMER_ID));
|
||||||
|
if (!CustomerId.NULL_UUID.equals(originatorCustomerId.getId())) {
|
||||||
|
customerIds.add(originatorCustomerId);
|
||||||
|
}
|
||||||
|
pageData = userService.findUsersByCustomerIds(tenantId, customerIds, pageLink);
|
||||||
}
|
}
|
||||||
return pageData.mapData(user -> new UserEmailInfo(user.getId(), user.getEmail(), user.getFirstName(), user.getLastName()));
|
} else {
|
||||||
} catch (Exception e) {
|
pageData = userService.findCustomerUsers(tenantId, alarm.getCustomerId(), pageLink);
|
||||||
throw handleException(e);
|
|
||||||
}
|
}
|
||||||
|
return pageData.mapData(user -> new UserEmailInfo(user.getId(), user.getEmail(), user.getFirstName(), user.getLastName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "Save user settings (saveUserSettings)",
|
@ApiOperation(value = "Save user settings (saveUserSettings)",
|
||||||
|
|||||||
@ -49,6 +49,7 @@ import org.thingsboard.server.common.data.page.PageLink;
|
|||||||
import org.thingsboard.server.common.data.security.Authority;
|
import org.thingsboard.server.common.data.security.Authority;
|
||||||
import org.thingsboard.server.common.data.settings.StarredDashboardInfo;
|
import org.thingsboard.server.common.data.settings.StarredDashboardInfo;
|
||||||
import org.thingsboard.server.common.data.settings.UserDashboardsInfo;
|
import org.thingsboard.server.common.data.settings.UserDashboardsInfo;
|
||||||
|
import org.thingsboard.server.dao.device.DeviceService;
|
||||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||||
import org.thingsboard.server.dao.service.DaoSqlTest;
|
import org.thingsboard.server.dao.service.DaoSqlTest;
|
||||||
import org.thingsboard.server.dao.user.UserDao;
|
import org.thingsboard.server.dao.user.UserDao;
|
||||||
@ -81,6 +82,9 @@ public class UserControllerTest extends AbstractControllerTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UserDao userDao;
|
private UserDao userDao;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DeviceService deviceService;
|
||||||
|
|
||||||
static class Config {
|
static class Config {
|
||||||
@Bean
|
@Bean
|
||||||
@Primary
|
@Primary
|
||||||
@ -740,6 +744,43 @@ public class UserControllerTest extends AbstractControllerTest {
|
|||||||
Assert.assertEquals(expectedCustomerUserIds, loadedUserIds);
|
Assert.assertEquals(expectedCustomerUserIds, loadedUserIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetUsersForDeletedAlarmOriginator() throws Exception {
|
||||||
|
loginTenantAdmin();
|
||||||
|
|
||||||
|
String email = "testEmail1";
|
||||||
|
for (int i = 0; i < 45; i++) {
|
||||||
|
User customerUser = createCustomerUser( customerId);
|
||||||
|
customerUser.setEmail(email + StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10)) + "@thingsboard.org");
|
||||||
|
doPost("/api/user", customerUser, User.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
Device device = new Device();
|
||||||
|
device.setName("testDevice");
|
||||||
|
device.setCustomerId(customerId);
|
||||||
|
Device savedDevice = doPost("/api/device", device, Device.class);
|
||||||
|
|
||||||
|
Alarm alarm = createTestAlarm(savedDevice);
|
||||||
|
|
||||||
|
deviceService.deleteDevice(tenantId, savedDevice.getId());
|
||||||
|
|
||||||
|
List<UserId> loadedUserIds = new ArrayList<>();
|
||||||
|
PageLink pageLink = new PageLink(33, 0);
|
||||||
|
PageData<UserEmailInfo> pageData;
|
||||||
|
do {
|
||||||
|
pageData = doGetTypedWithPageLink("/api/users/assign/" + alarm.getId().getId().toString() + "?",
|
||||||
|
new TypeReference<>() {}, pageLink);
|
||||||
|
loadedUserIds.addAll(pageData.getData().stream().map(UserEmailInfo::getId)
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
if (pageData.hasNext()) {
|
||||||
|
pageLink = pageLink.nextPageLink();
|
||||||
|
}
|
||||||
|
} while (pageData.hasNext());
|
||||||
|
|
||||||
|
Assert.assertEquals(1, loadedUserIds.size());
|
||||||
|
Assert.assertEquals(tenantAdminUserId, loadedUserIds.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeleteUserWithDeleteRelationsOk() throws Exception {
|
public void testDeleteUserWithDeleteRelationsOk() throws Exception {
|
||||||
loginSysAdmin();
|
loginSysAdmin();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user