Browse Source

extended getTenantsByIds API for tenant admins

pull/14679/head
dashevchenko 9 months ago
parent
commit
6e6addaf95
  1. 15
      application/src/main/java/org/thingsboard/server/controller/TenantController.java
  2. 5
      application/src/test/java/org/thingsboard/server/controller/TenantControllerTest.java

15
application/src/main/java/org/thingsboard/server/controller/TenantController.java

@ -169,7 +169,7 @@ public class TenantController extends BaseController {
return checkNotNull(tenantService.findTenantInfos(pageLink));
}
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
@GetMapping(value = "/tenants", params = {"tenantIds"})
public List<Tenant> getTenantsByIds(
@Parameter(description = "A list of tenant ids, separated by comma ','", array = @ArraySchema(schema = @Schema(type = "string")))
@ -179,7 +179,18 @@ public class TenantController extends BaseController {
for (UUID tenantIdUUID : tenantUUIDs) {
tenantIds.add(TenantId.fromUUID(tenantIdUUID));
}
return tenantService.findTenantsByIds(tenantId, tenantIds);
List<Tenant> tenants = tenantService.findTenantsByIds(tenantId, tenantIds);
return filterTenantsByReadPermission(tenants);
}
private List<Tenant> filterTenantsByReadPermission(List<Tenant> tenants) {
return tenants.stream().filter(tenant -> {
try {
return accessControlService.hasPermission(getCurrentUser(), Resource.TENANT, Operation.READ, tenant.getId(), tenant);
} catch (ThingsboardException e) {
return false;
}
}).toList();
}
}

5
application/src/test/java/org/thingsboard/server/controller/TenantControllerTest.java

@ -219,6 +219,11 @@ public class TenantControllerTest extends AbstractControllerTest {
Assert.assertEquals(savedTenant, foundTenant);
}
loginTenantAdmin();
Tenant[] foundTenantsByTenant = doGet("/api/tenants?tenantIds=" + idsParam, Tenant[].class);
assertThat(foundTenantsByTenant).isEmpty();
loginSysAdmin();
for (Tenant savedTenant : savedTenants) {
deleteTenant(savedTenant.getId());
}

Loading…
Cancel
Save