|
|
|
@ -24,13 +24,11 @@ import org.springframework.web.bind.annotation.RequestParam; |
|
|
|
import org.springframework.web.bind.annotation.ResponseBody; |
|
|
|
import org.springframework.web.bind.annotation.ResponseStatus; |
|
|
|
import org.springframework.web.bind.annotation.RestController; |
|
|
|
import org.thingsboard.server.common.data.alarm.Alarm; |
|
|
|
import org.thingsboard.server.common.data.audit.ActionType; |
|
|
|
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; |
|
|
|
import org.thingsboard.server.common.data.exception.ThingsboardException; |
|
|
|
import org.thingsboard.server.common.data.id.EntityId; |
|
|
|
import org.thingsboard.server.common.data.id.EntityIdFactory; |
|
|
|
import org.thingsboard.server.common.data.id.UUIDBased; |
|
|
|
import org.thingsboard.server.common.data.relation.EntityRelation; |
|
|
|
import org.thingsboard.server.common.data.relation.EntityRelationInfo; |
|
|
|
import org.thingsboard.server.common.data.relation.EntityRelationsQuery; |
|
|
|
@ -38,6 +36,7 @@ import org.thingsboard.server.common.data.relation.RelationTypeGroup; |
|
|
|
import org.thingsboard.server.service.security.permission.Operation; |
|
|
|
|
|
|
|
import java.util.List; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
|
|
@RestController |
|
|
|
@ -167,7 +166,7 @@ public class EntityRelationController extends BaseController { |
|
|
|
checkEntityId(entityId, Operation.READ); |
|
|
|
RelationTypeGroup typeGroup = parseRelationTypeGroup(strRelationTypeGroup, RelationTypeGroup.COMMON); |
|
|
|
try { |
|
|
|
return checkNotNull(relationService.findByFrom(getTenantId(), entityId, typeGroup)); |
|
|
|
return checkNotNull(filterRelationsByReadPermission(relationService.findByFrom(getTenantId(), entityId, typeGroup))); |
|
|
|
} catch (Exception e) { |
|
|
|
throw handleException(e); |
|
|
|
} |
|
|
|
@ -185,7 +184,7 @@ public class EntityRelationController extends BaseController { |
|
|
|
checkEntityId(entityId, Operation.READ); |
|
|
|
RelationTypeGroup typeGroup = parseRelationTypeGroup(strRelationTypeGroup, RelationTypeGroup.COMMON); |
|
|
|
try { |
|
|
|
return checkNotNull(relationService.findInfoByFrom(getTenantId(), entityId, typeGroup).get()); |
|
|
|
return checkNotNull(filterRelationsByReadPermission(relationService.findInfoByFrom(getTenantId(), entityId, typeGroup).get())); |
|
|
|
} catch (Exception e) { |
|
|
|
throw handleException(e); |
|
|
|
} |
|
|
|
@ -205,7 +204,7 @@ public class EntityRelationController extends BaseController { |
|
|
|
checkEntityId(entityId, Operation.READ); |
|
|
|
RelationTypeGroup typeGroup = parseRelationTypeGroup(strRelationTypeGroup, RelationTypeGroup.COMMON); |
|
|
|
try { |
|
|
|
return checkNotNull(relationService.findByFromAndType(getTenantId(), entityId, strRelationType, typeGroup)); |
|
|
|
return checkNotNull(filterRelationsByReadPermission(relationService.findByFromAndType(getTenantId(), entityId, strRelationType, typeGroup))); |
|
|
|
} catch (Exception e) { |
|
|
|
throw handleException(e); |
|
|
|
} |
|
|
|
@ -223,7 +222,7 @@ public class EntityRelationController extends BaseController { |
|
|
|
checkEntityId(entityId, Operation.READ); |
|
|
|
RelationTypeGroup typeGroup = parseRelationTypeGroup(strRelationTypeGroup, RelationTypeGroup.COMMON); |
|
|
|
try { |
|
|
|
return checkNotNull(relationService.findByTo(getTenantId(), entityId, typeGroup)); |
|
|
|
return checkNotNull(filterRelationsByReadPermission(relationService.findByTo(getTenantId(), entityId, typeGroup))); |
|
|
|
} catch (Exception e) { |
|
|
|
throw handleException(e); |
|
|
|
} |
|
|
|
@ -241,7 +240,7 @@ public class EntityRelationController extends BaseController { |
|
|
|
checkEntityId(entityId, Operation.READ); |
|
|
|
RelationTypeGroup typeGroup = parseRelationTypeGroup(strRelationTypeGroup, RelationTypeGroup.COMMON); |
|
|
|
try { |
|
|
|
return checkNotNull(relationService.findInfoByTo(getTenantId(), entityId, typeGroup).get()); |
|
|
|
return checkNotNull(filterRelationsByReadPermission(relationService.findInfoByTo(getTenantId(), entityId, typeGroup).get())); |
|
|
|
} catch (Exception e) { |
|
|
|
throw handleException(e); |
|
|
|
} |
|
|
|
@ -261,7 +260,7 @@ public class EntityRelationController extends BaseController { |
|
|
|
checkEntityId(entityId, Operation.READ); |
|
|
|
RelationTypeGroup typeGroup = parseRelationTypeGroup(strRelationTypeGroup, RelationTypeGroup.COMMON); |
|
|
|
try { |
|
|
|
return checkNotNull(relationService.findByToAndType(getTenantId(), entityId, strRelationType, typeGroup)); |
|
|
|
return checkNotNull(filterRelationsByReadPermission(relationService.findByToAndType(getTenantId(), entityId, strRelationType, typeGroup))); |
|
|
|
} catch (Exception e) { |
|
|
|
throw handleException(e); |
|
|
|
} |
|
|
|
@ -276,7 +275,7 @@ public class EntityRelationController extends BaseController { |
|
|
|
checkNotNull(query.getFilters()); |
|
|
|
checkEntityId(query.getParameters().getEntityId(), Operation.READ); |
|
|
|
try { |
|
|
|
return checkNotNull(relationService.findByQuery(getTenantId(), query).get()); |
|
|
|
return checkNotNull(filterRelationsByReadPermission(relationService.findByQuery(getTenantId(), query).get())); |
|
|
|
} catch (Exception e) { |
|
|
|
throw handleException(e); |
|
|
|
} |
|
|
|
@ -291,12 +290,28 @@ public class EntityRelationController extends BaseController { |
|
|
|
checkNotNull(query.getFilters()); |
|
|
|
checkEntityId(query.getParameters().getEntityId(), Operation.READ); |
|
|
|
try { |
|
|
|
return checkNotNull(relationService.findInfoByQuery(getTenantId(), query).get()); |
|
|
|
return checkNotNull(filterRelationsByReadPermission(relationService.findInfoByQuery(getTenantId(), query).get())); |
|
|
|
} catch (Exception e) { |
|
|
|
throw handleException(e); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private <T extends EntityRelation> List<T> filterRelationsByReadPermission(List<T> relationsByQuery) { |
|
|
|
return relationsByQuery.stream().filter(relationByQuery -> { |
|
|
|
try { |
|
|
|
checkEntityId(relationByQuery.getTo(), Operation.READ); |
|
|
|
} catch (ThingsboardException e) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
try { |
|
|
|
checkEntityId(relationByQuery.getFrom(), Operation.READ); |
|
|
|
} catch (ThingsboardException e) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
return true; |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
} |
|
|
|
|
|
|
|
private RelationTypeGroup parseRelationTypeGroup(String strRelationTypeGroup, RelationTypeGroup defaultValue) { |
|
|
|
RelationTypeGroup result = defaultValue; |
|
|
|
if (strRelationTypeGroup != null && strRelationTypeGroup.trim().length() > 0) { |
|
|
|
|