This commit is contained in:
IrynaMatveieva 2025-04-28 12:10:11 +03:00
parent b09967074e
commit e644def232
9 changed files with 40 additions and 30 deletions

View File

@ -162,11 +162,11 @@ public class SystemInfoController extends BaseController {
} }
systemParams.setMaxArgumentsPerCF(tenantProfileConfiguration.getMaxArgumentsPerCF()); systemParams.setMaxArgumentsPerCF(tenantProfileConfiguration.getMaxArgumentsPerCF());
systemParams.setMaxDataPointsPerRollingArg(tenantProfileConfiguration.getMaxDataPointsPerRollingArg()); systemParams.setMaxDataPointsPerRollingArg(tenantProfileConfiguration.getMaxDataPointsPerRollingArg());
systemParams.setTrendzSettings(trendzSettingsService.findTrendzSettings(currentUser.getTenantId()));
} }
systemParams.setMobileQrEnabled(Optional.ofNullable(qrCodeSettingService.findQrCodeSettings(TenantId.SYS_TENANT_ID)) systemParams.setMobileQrEnabled(Optional.ofNullable(qrCodeSettingService.findQrCodeSettings(TenantId.SYS_TENANT_ID))
.map(QrCodeSettings::getQrCodeConfig).map(QRCodeConfig::isShowOnHomePage) .map(QrCodeSettings::getQrCodeConfig).map(QRCodeConfig::isShowOnHomePage)
.orElse(false)); .orElse(false));
systemParams.setTrendzSettings(trendzSettingsService.findTrendzSettings(currentUser.getTenantId()));
return systemParams; return systemParams;
} }

View File

@ -36,7 +36,8 @@ import org.thingsboard.server.service.security.permission.Resource;
import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_END; import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_END;
import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_START; import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_START;
import static org.thingsboard.server.controller.ControllerConstants.NEW_LINE; import static org.thingsboard.server.controller.ControllerConstants.NEW_LINE;
import static org.thingsboard.server.controller.ControllerConstants.SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH; import static org.thingsboard.server.controller.ControllerConstants.TENANT_AUTHORITY_PARAGRAPH;
import static org.thingsboard.server.controller.ControllerConstants.TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH;
@RestController @RestController
@TbCoreComponent @TbCoreComponent
@ -47,33 +48,32 @@ public class TrendzController extends BaseController {
private final TrendzSettingsService trendzSettingsService; private final TrendzSettingsService trendzSettingsService;
@ApiOperation(value = "Save Trendz settings (saveTrendzSettings)", @ApiOperation(value = "Save Trendz settings (saveTrendzSettings)",
notes = "Saves Trendz settings for this tenant or sysadmin.\n" + NEW_LINE + notes = "Saves Trendz settings for this tenant.\n" + NEW_LINE +
"Here is an example of the Trendz settings:\n" + "Here is an example of the Trendz settings:\n" +
MARKDOWN_CODE_BLOCK_START + MARKDOWN_CODE_BLOCK_START +
"{\n" + "{\n" +
" \"enabled\": true,\n" + " \"enabled\": true,\n" +
" \"trendzUrl\": \"https://some.domain.com:18888/also_necessary_prefix\"\n" + " \"baseUrl\": \"https://some.domain.com:18888/also_necessary_prefix\"\n" +
"}" + "}" +
MARKDOWN_CODE_BLOCK_END + MARKDOWN_CODE_BLOCK_END +
SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH) TENANT_AUTHORITY_PARAGRAPH)
@PostMapping("/trendz/settings") @PostMapping("/trendz/settings")
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
public TrendzSettings saveTrendzSettings(@RequestBody TrendzSettings trendzSettings, public TrendzSettings saveTrendzSettings(@RequestBody TrendzSettings trendzSettings,
@AuthenticationPrincipal SecurityUser user) throws ThingsboardException { @AuthenticationPrincipal SecurityUser user) throws ThingsboardException {
accessControlService.checkPermission(user, Resource.TRENDZ_SETTINGS, Operation.WRITE); accessControlService.checkPermission(user, Resource.ADMIN_SETTINGS, Operation.WRITE);
TenantId tenantId = user.isSystemAdmin() ? TenantId.SYS_TENANT_ID : user.getTenantId(); TenantId tenantId = user.getTenantId();
trendzSettingsService.saveTrendzSettings(tenantId, trendzSettings); trendzSettingsService.saveTrendzSettings(tenantId, trendzSettings);
return trendzSettings; return trendzSettings;
} }
@ApiOperation(value = "Get Trendz Settings (getTrendzSettings)", @ApiOperation(value = "Get Trendz Settings (getTrendzSettings)",
notes = "Retrieves trendz settings for this tenant or sysadmin." + notes = "Retrieves Trendz settings for this tenant." +
SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH) TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
@GetMapping("/trendz/settings") @GetMapping("/trendz/settings")
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
public TrendzSettings getTrendzSettings(@AuthenticationPrincipal SecurityUser user) throws ThingsboardException { public TrendzSettings getTrendzSettings(@AuthenticationPrincipal SecurityUser user) {
accessControlService.checkPermission(user, Resource.TRENDZ_SETTINGS, Operation.READ); TenantId tenantId = user.getTenantId();
TenantId tenantId = user.isSystemAdmin() ? TenantId.SYS_TENANT_ID : user.getTenantId();
return trendzSettingsService.findTrendzSettings(tenantId); return trendzSettingsService.findTrendzSettings(tenantId);
} }

View File

@ -48,7 +48,6 @@ public class CustomerUserPermissions extends AbstractPermissions {
put(Resource.ASSET_PROFILE, profilePermissionChecker); put(Resource.ASSET_PROFILE, profilePermissionChecker);
put(Resource.TB_RESOURCE, customerResourcePermissionChecker); put(Resource.TB_RESOURCE, customerResourcePermissionChecker);
put(Resource.MOBILE_APP_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ)); put(Resource.MOBILE_APP_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ));
put(Resource.TRENDZ_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ));
} }
private static final PermissionChecker customerAlarmPermissionChecker = new PermissionChecker() { private static final PermissionChecker customerAlarmPermissionChecker = new PermissionChecker() {

View File

@ -51,8 +51,7 @@ public enum Resource {
NOTIFICATION(EntityType.NOTIFICATION_TARGET, EntityType.NOTIFICATION_TEMPLATE, NOTIFICATION(EntityType.NOTIFICATION_TARGET, EntityType.NOTIFICATION_TEMPLATE,
EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE), EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE),
MOBILE_APP_SETTINGS, MOBILE_APP_SETTINGS,
CALCULATED_FIELD(EntityType.CALCULATED_FIELD), CALCULATED_FIELD(EntityType.CALCULATED_FIELD);
TRENDZ_SETTINGS;
private final Set<EntityType> entityTypes; private final Set<EntityType> entityTypes;

View File

@ -45,7 +45,6 @@ public class SysAdminPermissions extends AbstractPermissions {
put(Resource.QUEUE, systemEntityPermissionChecker); put(Resource.QUEUE, systemEntityPermissionChecker);
put(Resource.NOTIFICATION, systemEntityPermissionChecker); put(Resource.NOTIFICATION, systemEntityPermissionChecker);
put(Resource.MOBILE_APP_SETTINGS, PermissionChecker.allowAllPermissionChecker); put(Resource.MOBILE_APP_SETTINGS, PermissionChecker.allowAllPermissionChecker);
put(Resource.TRENDZ_SETTINGS, PermissionChecker.allowAllPermissionChecker);
} }
private static final PermissionChecker systemEntityPermissionChecker = new PermissionChecker() { private static final PermissionChecker systemEntityPermissionChecker = new PermissionChecker() {

View File

@ -56,7 +56,6 @@ public class TenantAdminPermissions extends AbstractPermissions {
put(Resource.MOBILE_APP, tenantEntityPermissionChecker); put(Resource.MOBILE_APP, tenantEntityPermissionChecker);
put(Resource.MOBILE_APP_BUNDLE, tenantEntityPermissionChecker); put(Resource.MOBILE_APP_BUNDLE, tenantEntityPermissionChecker);
put(Resource.CALCULATED_FIELD, tenantEntityPermissionChecker); put(Resource.CALCULATED_FIELD, tenantEntityPermissionChecker);
put(Resource.TRENDZ_SETTINGS, PermissionChecker.allowAllPermissionChecker);
} }
public static final PermissionChecker tenantEntityPermissionChecker = new PermissionChecker() { public static final PermissionChecker tenantEntityPermissionChecker = new PermissionChecker() {

View File

@ -15,6 +15,7 @@
*/ */
package org.thingsboard.server.controller; package org.thingsboard.server.controller;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.thingsboard.server.common.data.trendz.TrendzSettings; import org.thingsboard.server.common.data.trendz.TrendzSettings;
import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.DaoSqlTest;
@ -27,6 +28,17 @@ public class TrendzControllerTest extends AbstractControllerTest {
private final String trendzUrl = "https://some.domain.com:18888/also_necessary_prefix"; private final String trendzUrl = "https://some.domain.com:18888/also_necessary_prefix";
@Before
public void setUp() throws Exception {
loginTenantAdmin();
TrendzSettings trendzSettings = new TrendzSettings();
trendzSettings.setEnabled(true);
trendzSettings.setBaseUrl(trendzUrl);
doPost("/api/trendz/settings", trendzSettings).andExpect(status().isOk());
}
@Test @Test
public void testTrendzSettingsWhenTenant() throws Exception { public void testTrendzSettingsWhenTenant() throws Exception {
loginTenantAdmin(); loginTenantAdmin();
@ -34,11 +46,11 @@ public class TrendzControllerTest extends AbstractControllerTest {
TrendzSettings trendzSettings = doGet("/api/trendz/settings", TrendzSettings.class); TrendzSettings trendzSettings = doGet("/api/trendz/settings", TrendzSettings.class);
assertThat(trendzSettings).isNotNull(); assertThat(trendzSettings).isNotNull();
assertThat(trendzSettings.isEnabled()).isFalse(); assertThat(trendzSettings.isEnabled()).isTrue();
assertThat(trendzSettings.getTrendzUrl()).isNull(); assertThat(trendzSettings.getBaseUrl()).isEqualTo(trendzUrl);
trendzSettings.setEnabled(true); String updatedUrl = "https://some.domain.com:18888/tenant_trendz";
trendzSettings.setTrendzUrl(trendzUrl); trendzSettings.setBaseUrl(updatedUrl);
doPost("/api/trendz/settings", trendzSettings).andExpect(status().isOk()); doPost("/api/trendz/settings", trendzSettings).andExpect(status().isOk());
@ -50,14 +62,16 @@ public class TrendzControllerTest extends AbstractControllerTest {
public void testTrendzSettingsWhenCustomer() throws Exception { public void testTrendzSettingsWhenCustomer() throws Exception {
loginCustomerUser(); loginCustomerUser();
TrendzSettings trendzSettings = new TrendzSettings(); TrendzSettings newTrendzSettings = new TrendzSettings();
trendzSettings.setEnabled(true); newTrendzSettings.setEnabled(true);
trendzSettings.setTrendzUrl("https://some.domain.com:18888/customer_trendz"); newTrendzSettings.setBaseUrl("https://some.domain.com:18888/customer_trendz");
doPost("/api/trendz/settings", trendzSettings).andExpect(status().isForbidden()); doPost("/api/trendz/settings", newTrendzSettings).andExpect(status().isForbidden());
TrendzSettings fetchedTrendzSettings = doGet("/api/trendz/settings", TrendzSettings.class); TrendzSettings fetchedTrendzSettings = doGet("/api/trendz/settings", TrendzSettings.class);
assertThat(fetchedTrendzSettings).isNotNull(); assertThat(fetchedTrendzSettings).isNotNull();
assertThat(fetchedTrendzSettings.isEnabled()).isTrue();
assertThat(fetchedTrendzSettings.getBaseUrl()).isEqualTo(trendzUrl);
} }
} }

View File

@ -21,6 +21,6 @@ import lombok.Data;
public class TrendzSettings { public class TrendzSettings {
private boolean enabled; private boolean enabled;
private String trendzUrl; private String baseUrl;
} }

View File

@ -166,10 +166,10 @@ public class TenantServiceImpl extends AbstractCachedEntityService<TenantId, Ten
Validator.validateId(tenantId, id -> INCORRECT_TENANT_ID + id); Validator.validateId(tenantId, id -> INCORRECT_TENANT_ID + id);
userService.deleteAllByTenantId(tenantId); userService.deleteAllByTenantId(tenantId);
adminSettingsService.deleteAdminSettingsByTenantId(tenantId);
qrCodeSettingService.deleteByTenantId(tenantId);
notificationSettingsService.deleteNotificationSettings(tenantId); notificationSettingsService.deleteNotificationSettings(tenantId);
trendzSettingsService.deleteTrendzSettings(tenantId); trendzSettingsService.deleteTrendzSettings(tenantId);
adminSettingsService.deleteAdminSettingsByTenantId(tenantId);
qrCodeSettingService.deleteByTenantId(tenantId);
tenantDao.removeById(tenantId, tenantId.getId()); tenantDao.removeById(tenantId, tenantId.getId());
publishEvictEvent(new TenantEvictEvent(tenantId, true)); publishEvictEvent(new TenantEvictEvent(tenantId, true));