Browse Source

declined permissions for customers

pull/12009/head
IrynaMatveieva 2 years ago
parent
commit
c223f1d2ba
  1. 27
      application/src/main/java/org/thingsboard/server/service/security/permission/CustomerUserPermissions.java
  2. 19
      application/src/main/java/org/thingsboard/server/service/security/permission/TenantAdminPermissions.java
  3. 4
      dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java
  4. 4
      dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java
  5. 22
      dao/src/test/java/org/thingsboard/server/dao/service/AssetProfileServiceTest.java
  6. 20
      dao/src/test/java/org/thingsboard/server/dao/service/DeviceProfileServiceTest.java

27
application/src/main/java/org/thingsboard/server/service/security/permission/CustomerUserPermissions.java

@ -34,8 +34,8 @@ public class CustomerUserPermissions extends AbstractPermissions {
public CustomerUserPermissions() {
super();
put(Resource.ALARM, customerAlarmPermissionChecker);
put(Resource.ASSET, customerEntityWithCalculatedFieldPermissionChecker);
put(Resource.DEVICE, customerEntityWithCalculatedFieldPermissionChecker);
put(Resource.ASSET, customerEntityPermissionChecker);
put(Resource.DEVICE, customerEntityPermissionChecker);
put(Resource.CUSTOMER, customerPermissionChecker);
put(Resource.DASHBOARD, customerDashboardPermissionChecker);
put(Resource.ENTITY_VIEW, customerEntityPermissionChecker);
@ -85,29 +85,6 @@ public class CustomerUserPermissions extends AbstractPermissions {
}
};
private static final PermissionChecker customerEntityWithCalculatedFieldPermissionChecker =
new PermissionChecker.GenericPermissionChecker(Operation.READ, Operation.READ_CREDENTIALS,
Operation.READ_ATTRIBUTES, Operation.READ_TELEMETRY, Operation.RPC_CALL, Operation.CLAIM_DEVICES,
Operation.WRITE, Operation.WRITE_ATTRIBUTES, Operation.WRITE_TELEMETRY, Operation.READ_CALCULATED_FIELD,
Operation.WRITE_CALCULATED_FIELD) {
@Override
@SuppressWarnings("unchecked")
public boolean hasPermission(SecurityUser user, Operation operation, EntityId entityId, HasTenantId entity) {
if (!super.hasPermission(user, operation, entityId, entity)) {
return false;
}
if (!user.getTenantId().equals(entity.getTenantId())) {
return false;
}
if (!(entity instanceof HasCustomerId)) {
return false;
}
return operation.equals(Operation.CLAIM_DEVICES) || user.getCustomerId().equals(((HasCustomerId) entity).getCustomerId());
}
};
private static final PermissionChecker customerPermissionChecker =
new PermissionChecker.GenericPermissionChecker(Operation.READ, Operation.READ_ATTRIBUTES, Operation.READ_TELEMETRY) {

19
application/src/main/java/org/thingsboard/server/service/security/permission/TenantAdminPermissions.java

@ -30,8 +30,8 @@ public class TenantAdminPermissions extends AbstractPermissions {
super();
put(Resource.ADMIN_SETTINGS, PermissionChecker.allowAllPermissionChecker);
put(Resource.ALARM, tenantEntityPermissionChecker);
put(Resource.ASSET, tenantEntityWithCalculatedFieldPermissionChecker);
put(Resource.DEVICE, tenantEntityWithCalculatedFieldPermissionChecker);
put(Resource.ASSET, tenantEntityPermissionChecker);
put(Resource.DEVICE, tenantEntityPermissionChecker);
put(Resource.CUSTOMER, tenantEntityPermissionChecker);
put(Resource.DASHBOARD, tenantEntityPermissionChecker);
put(Resource.ENTITY_VIEW, tenantEntityPermissionChecker);
@ -40,8 +40,8 @@ public class TenantAdminPermissions extends AbstractPermissions {
put(Resource.USER, userPermissionChecker);
put(Resource.WIDGETS_BUNDLE, widgetsPermissionChecker);
put(Resource.WIDGET_TYPE, widgetsPermissionChecker);
put(Resource.DEVICE_PROFILE, tenantEntityWithCalculatedFieldPermissionChecker);
put(Resource.ASSET_PROFILE, tenantEntityWithCalculatedFieldPermissionChecker);
put(Resource.DEVICE_PROFILE, tenantEntityPermissionChecker);
put(Resource.ASSET_PROFILE, tenantEntityPermissionChecker);
put(Resource.API_USAGE_STATE, tenantEntityPermissionChecker);
put(Resource.TB_RESOURCE, tbResourcePermissionChecker);
put(Resource.OTA_PACKAGE, tenantEntityPermissionChecker);
@ -55,17 +55,6 @@ public class TenantAdminPermissions extends AbstractPermissions {
public static final PermissionChecker tenantEntityPermissionChecker = new PermissionChecker() {
@Override
public boolean hasPermission(SecurityUser user, Operation operation, EntityId entityId, HasTenantId entity) {
if (!user.getTenantId().equals(entity.getTenantId())) {
return false;
}
return !Operation.READ_CALCULATED_FIELD.equals(operation) && !Operation.WRITE_CALCULATED_FIELD.equals(operation);
}
};
public static final PermissionChecker tenantEntityWithCalculatedFieldPermissionChecker = new PermissionChecker() {
@Override
public boolean hasPermission(SecurityUser user, Operation operation, EntityId entityId, HasTenantId entity) {
if (!user.getTenantId().equals(entity.getTenantId())) {

4
dao/src/main/java/org/thingsboard/server/dao/asset/AssetProfileServiceImpl.java

@ -192,8 +192,8 @@ public class AssetProfileServiceImpl extends CachedVersionedEntityService<AssetP
if (assetProfile == null) {
return;
}
if (!force && (assetProfile.isDefault() || calculatedFieldService.existsByEntityId(tenantId, id))) {
throw new DataValidationException("Deletion of Asset Profile is prohibited!");
if (!force && assetProfile.isDefault()) {
throw new DataValidationException("Deletion of Default Asset Profile is prohibited!");
}
removeAssetProfile(tenantId, assetProfile);
}

4
dao/src/main/java/org/thingsboard/server/dao/device/DeviceProfileServiceImpl.java

@ -230,8 +230,8 @@ public class DeviceProfileServiceImpl extends CachedVersionedEntityService<Devic
if (deviceProfile == null) {
return;
}
if (!force && (deviceProfile.isDefault() || calculatedFieldService.existsByEntityId(tenantId, id))) {
throw new DataValidationException("Deletion of Device Profile is prohibited!");
if (!force && entityViewService.existsByTenantIdAndEntityId(tenantId, id)) {
throw new DataValidationException("Can't delete device that has entity views!");
}
removeDeviceProfile(tenantId, deviceProfile);
}

22
dao/src/test/java/org/thingsboard/server/dao/service/AssetProfileServiceTest.java

@ -28,12 +28,10 @@ import org.thingsboard.server.common.data.EntityInfo;
import org.thingsboard.server.common.data.asset.Asset;
import org.thingsboard.server.common.data.asset.AssetProfile;
import org.thingsboard.server.common.data.asset.AssetProfileInfo;
import org.thingsboard.server.common.data.calculated_field.CalculatedField;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.dao.asset.AssetProfileService;
import org.thingsboard.server.dao.asset.AssetService;
import org.thingsboard.server.dao.calculated_field.CalculatedFieldService;
import org.thingsboard.server.dao.exception.DataValidationException;
import java.util.ArrayList;
@ -45,7 +43,6 @@ import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@DaoSqlTest
public class AssetProfileServiceTest extends AbstractServiceTest {
@ -57,8 +54,6 @@ public class AssetProfileServiceTest extends AbstractServiceTest {
AssetProfileService assetProfileService;
@Autowired
AssetService assetService;
@Autowired
private CalculatedFieldService calculatedFieldService;
@Test
public void testSaveAssetProfile() {
@ -385,21 +380,4 @@ public class AssetProfileServiceTest extends AbstractServiceTest {
assertThat(assetProfileInfos).isEqualTo(expected);
}
@Test
public void testDeleteAssetProfileIfCalculatedFieldExists() {
AssetProfile assetProfile = this.createAssetProfile(tenantId, "Asset Profile");
AssetProfile savedAssetProfile = assetProfileService.saveAssetProfile(assetProfile);
CalculatedField calculatedField = new CalculatedField();
calculatedField.setTenantId(tenantId);
calculatedField.setName("Test CF");
calculatedField.setType("Simple");
calculatedField.setEntityId(savedAssetProfile.getId());
calculatedFieldService.save(calculatedField);
assertThatThrownBy(() -> assetProfileService.deleteAssetProfile(tenantId, savedAssetProfile.getId()))
.isInstanceOf(DataValidationException.class)
.hasMessage("Deletion of Asset Profile is prohibited!");
}
}

20
dao/src/test/java/org/thingsboard/server/dao/service/DeviceProfileServiceTest.java

@ -63,9 +63,6 @@ public class DeviceProfileServiceTest extends AbstractServiceTest {
DeviceService deviceService;
@Autowired
OtaPackageService otaPackageService;
@Autowired
private CalculatedFieldService calculatedFieldService;
private IdComparator<DeviceProfile> idComparator = new IdComparator<>();
private IdComparator<DeviceProfileInfo> deviceProfileInfoIdComparator = new IdComparator<>();
@ -484,21 +481,4 @@ public class DeviceProfileServiceTest extends AbstractServiceTest {
assertThat(deviceProfileInfos).isEqualTo(expected);
}
@Test
public void testDeleteDeviceProfileIfCalculatedFieldExists() {
DeviceProfile deviceProfile = this.createDeviceProfile(tenantId, "Device Profile");
DeviceProfile savedDeviceProfile = deviceProfileService.saveDeviceProfile(deviceProfile);
CalculatedField calculatedField = new CalculatedField();
calculatedField.setTenantId(tenantId);
calculatedField.setName("Test CF");
calculatedField.setType("Simple");
calculatedField.setEntityId(savedDeviceProfile.getId());
calculatedFieldService.save(calculatedField);
assertThatThrownBy(() -> deviceProfileService.deleteDeviceProfile(tenantId, savedDeviceProfile.getId()))
.isInstanceOf(DataValidationException.class)
.hasMessage("Deletion of Device Profile is prohibited!");
}
}

Loading…
Cancel
Save