Search in sources :

Example 96 with IdmFormDefinitionDto

use of eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto in project CzechIdMng by bcvsolutions.

the class IdmFormDefinitionController method secureAttributes.

/**
 * Secure form attributes by configured authorization policies. Usable, when
 * owner not exists (is created together with eavs).
 *
 * @param formInstance
 *
 * @since 10.2.0
 */
public void secureAttributes(IdmFormInstanceDto formInstance) {
    Assert.notNull(formInstance, "Form instance is required.");
    IdmFormDefinitionDto formDefinition = formInstance.getFormDefinition();
    Assert.notNull(formDefinition, "Form definition is required.");
    Class<? extends Identifiable> ownerType = formInstance.getOwnerType();
    Assert.notNull(ownerType, "Form instance owner type is required.");
    // 
    FormValueService<FormableEntity> formValueService = formService.getFormValueService(ownerType);
    List<IdmFormAttributeDto> attributes = formDefinition.getFormAttributes();
    Set<UUID> removeAttributes = new HashSet<>(attributes.size());
    attributes.forEach(attribute -> {
        IdmFormValueDto formValue = new IdmFormValueDto(attribute);
        formValue.setOwner(formService.getEmptyOwner(formDefinition));
        if (formInstance.getOwnerId() != null) {
            formValue.getOwner().setId(formInstance.getOwnerId());
        }
        Set<String> valuePermissions = formValueService.getPermissions(formValue);
        if (!PermissionUtils.hasPermission(valuePermissions, IdmBasePermission.READ)) {
            removeAttributes.add(attribute.getId());
        } else if (!PermissionUtils.hasAnyPermission(valuePermissions, IdmBasePermission.CREATE, IdmBasePermission.UPDATE)) {
            if (formInstance.getOwnerId() == null) {
                // new owner - remove readonly fields
                removeAttributes.add(attribute.getId());
            } else {
                formDefinition.getMappedAttribute(attribute.getId()).setReadonly(true);
            }
        }
    });
    removeAttributes.forEach(attributeId -> {
        formDefinition.removeFormAttribute(attributeId);
    });
}
Also used : IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) UUID(java.util.UUID) FormableEntity(eu.bcvsolutions.idm.core.eav.api.entity.FormableEntity) HashSet(java.util.HashSet)

Example 97 with IdmFormDefinitionDto

use of eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto in project CzechIdMng by bcvsolutions.

the class FormInstanceValidateProcessor method process.

@Override
public EventResult<IdmFormInstanceDto> process(EntityEvent<IdmFormInstanceDto> event) {
    IdmFormInstanceDto formInstance = event.getContent();
    Assert.notNull(formInstance.getFormDefinition(), "Form definition is required for form instance validation.");
    // 
    // resolve given / configured / overridden / default form definition
    // configured definition is loaded only once and applied twice (optimization)
    IdmFormDefinitionDto configuredFormDefinition = formProjectionManager.getConfiguredFormDefinition(getOwner(formInstance), formInstance.getFormDefinition());
    IdmFormDefinitionDto formDefinition = formProjectionManager.overrideFormDefinition(formService.getDefinition(formInstance.getFormDefinition().getId()), configuredFormDefinition);
    Assert.notNull(formDefinition, "Form definition is required for form instance validation.");
    IdmFormDefinitionDto formInstanceDefinition = formProjectionManager.overrideFormDefinition(formInstance.getFormDefinition(), configuredFormDefinition);
    Assert.notNull(formInstanceDefinition, "Form definition is required for form instance validation.");
    // 
    Map<String, Serializable> properties = event.getProperties();
    // 
    // get distinct attributes from the sent values
    // PATCH is used - only sent attributes are validated
    Set<IdmFormAttributeDto> sentAttributes = formInstance.getValues().stream().map(IdmFormValueDto::getFormAttribute).map(attributeId -> {
        IdmFormAttributeDto mappedAttribute = formInstanceDefinition.getMappedAttribute(attributeId);
        if (mappedAttribute != null) {
            return mappedAttribute;
        }
        return formDefinition.getMappedAttribute(attributeId);
    }).collect(Collectors.toSet());
    // only sent attributes in definition and instance
    formDefinition.setFormAttributes(Lists.newArrayList(sentAttributes));
    formInstance.setFormDefinition(formDefinition);
    // validate
    List<InvalidFormAttributeDto> errors = formService.validate(formInstance);
    // skip <required> validation if contract update is performed from time slice
    if (getBooleanProperty(ContractSliceManager.SKIP_CHECK_FOR_SLICES, properties)) {
        errors = errors.stream().filter(error -> {
            return !error.isMissingValue();
        }).collect(Collectors.toList());
    }
    if (!errors.isEmpty()) {
        throw new InvalidFormException(errors);
    }
    // 
    return new DefaultEventResult<>(event, this);
}
Also used : IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) FormProjectionManager(eu.bcvsolutions.idm.core.eav.api.service.FormProjectionManager) Autowired(org.springframework.beans.factory.annotation.Autowired) CoreEventProcessor(eu.bcvsolutions.idm.core.api.event.CoreEventProcessor) FormService(eu.bcvsolutions.idm.core.eav.api.service.FormService) FormInstanceProcessor(eu.bcvsolutions.idm.core.eav.api.event.processor.FormInstanceProcessor) Lists(com.google.common.collect.Lists) LookupService(eu.bcvsolutions.idm.core.api.service.LookupService) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) Map(java.util.Map) DefaultEventResult(eu.bcvsolutions.idm.core.api.event.DefaultEventResult) EventResult(eu.bcvsolutions.idm.core.api.event.EventResult) IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) EntityEvent(eu.bcvsolutions.idm.core.api.event.EntityEvent) Description(org.springframework.context.annotation.Description) Set(java.util.Set) Collectors(java.util.stream.Collectors) Serializable(java.io.Serializable) InvalidFormException(eu.bcvsolutions.idm.core.api.exception.InvalidFormException) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) List(java.util.List) Component(org.springframework.stereotype.Component) CoreEventType(eu.bcvsolutions.idm.core.api.event.CoreEvent.CoreEventType) Identifiable(eu.bcvsolutions.idm.core.api.domain.Identifiable) ContractSliceManager(eu.bcvsolutions.idm.core.api.service.ContractSliceManager) Assert(org.springframework.util.Assert) InvalidFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.InvalidFormAttributeDto) Serializable(java.io.Serializable) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) InvalidFormException(eu.bcvsolutions.idm.core.api.exception.InvalidFormException) IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) InvalidFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.InvalidFormAttributeDto) DefaultEventResult(eu.bcvsolutions.idm.core.api.event.DefaultEventResult) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto)

Example 98 with IdmFormDefinitionDto

use of eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto in project CzechIdMng by bcvsolutions.

the class FormDefinitionValidateProcessor method process.

@Override
public EventResult<IdmFormDefinitionDto> process(EntityEvent<IdmFormDefinitionDto> event) {
    IdmFormDefinitionDto dto = event.getContent();
    IdmFormDefinitionDto original = event.getOriginalSource();
    // 
    if (event.hasType(FormDefinitionEventType.DELETE) && dto.isMain()) {
        throw new ResultCodeException(CoreResultCode.FORM_DEFINITION_DELETE_FAILED_MAIN_FORM, ImmutableMap.of("code", dto.getCode()));
    }
    if (original != null && original.isMain() && !dto.isMain()) {
        throw new ResultCodeException(CoreResultCode.FORM_DEFINITION_UPDATE_FAILED_MAIN_FORM, ImmutableMap.of("code", dto.getCode()));
    }
    // 
    return new DefaultEventResult<>(event, this);
}
Also used : ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) DefaultEventResult(eu.bcvsolutions.idm.core.api.event.DefaultEventResult) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto)

Example 99 with IdmFormDefinitionDto

use of eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto in project CzechIdMng by bcvsolutions.

the class IdmConceptRoleRequestController method saveFormValues.

/**
 * Saves entity's form values
 *
 * @param backendId
 * @param formValues
 * @return
 */
@ResponseBody
@PreAuthorize("hasAuthority('" + CoreGroupPermission.ROLE_REQUEST_UPDATE + "')")
@RequestMapping(value = "/{backendId}/form-values", method = { RequestMethod.POST, RequestMethod.PATCH })
@ApiOperation(value = "Concept form definition - save values", nickname = "postIdentityRoleFormValues", tags = { IdmIdentityRoleController.TAG }, authorizations = { @Authorization(value = SwaggerConfig.AUTHENTICATION_BASIC, scopes = { @AuthorizationScope(scope = CoreGroupPermission.ROLE_REQUEST_UPDATE, description = "") }), @Authorization(value = SwaggerConfig.AUTHENTICATION_CIDMST, scopes = { @AuthorizationScope(scope = CoreGroupPermission.ROLE_REQUEST_UPDATE, description = "") }) })
public Resource<?> saveFormValues(@ApiParam(value = "Concept's uuid identifier or code.", required = true) @PathVariable @NotNull String backendId, @ApiParam(value = "Code of form definition (default will be used if no code is given).", required = false, defaultValue = FormService.DEFAULT_DEFINITION_CODE) @RequestParam(name = "definitionCode", required = false) String definitionCode, @RequestBody @Valid List<IdmFormValueDto> formValues) {
    IdmConceptRoleRequestDto dto = getDto(backendId);
    if (dto == null) {
        throw new ResultCodeException(CoreResultCode.NOT_FOUND, ImmutableMap.of("entity", backendId));
    }
    checkAccess(dto, IdmBasePermission.UPDATE);
    // 
    IdmFormDefinitionDto formDefinition = formDefinitionController.getDefinition(IdmConceptRoleRequest.class, definitionCode);
    // 
    return formDefinitionController.saveFormValues(dto, formDefinition, formValues);
}
Also used : ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) IdmConceptRoleRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmConceptRoleRequestDto) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) ApiOperation(io.swagger.annotations.ApiOperation) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) ResponseBody(org.springframework.web.bind.annotation.ResponseBody) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 100 with IdmFormDefinitionDto

use of eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto in project CzechIdMng by bcvsolutions.

the class IdmConceptRoleRequestController method getFormValues.

/**
 * Returns entity's filled form values
 *
 * @param backendId
 * @return
 */
@ResponseBody
@RequestMapping(value = "/{backendId}/form-values", method = RequestMethod.GET)
@PreAuthorize("hasAuthority('" + CoreGroupPermission.ROLE_REQUEST_READ + "')")
@ApiOperation(value = "Concept form definition - read values", nickname = "getRoleFormValues", tags = { IdmIdentityRoleController.TAG }, authorizations = { @Authorization(value = SwaggerConfig.AUTHENTICATION_BASIC, scopes = { @AuthorizationScope(scope = CoreGroupPermission.ROLE_REQUEST_READ, description = "") }), @Authorization(value = SwaggerConfig.AUTHENTICATION_CIDMST, scopes = { @AuthorizationScope(scope = CoreGroupPermission.ROLE_REQUEST_READ, description = "") }) })
public Resource<?> getFormValues(@ApiParam(value = "Concept's uuid identifier or code.", required = true) @PathVariable @NotNull String backendId, @ApiParam(value = "Code of form definition (default will be used if no code is given).", required = false, defaultValue = FormService.DEFAULT_DEFINITION_CODE) @RequestParam(name = "definitionCode", required = false) String definitionCode) {
    IdmConceptRoleRequestDto dto = getDto(backendId);
    if (dto == null) {
        throw new ResultCodeException(CoreResultCode.NOT_FOUND, ImmutableMap.of("entity", backendId));
    }
    // 
    IdmFormDefinitionDto formDefinition = formDefinitionController.getDefinition(IdmConceptRoleRequest.class, definitionCode);
    // 
    return formDefinitionController.getFormValues(dto, formDefinition);
}
Also used : ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) IdmConceptRoleRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmConceptRoleRequestDto) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) ApiOperation(io.swagger.annotations.ApiOperation) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) ResponseBody(org.springframework.web.bind.annotation.ResponseBody) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Aggregations

IdmFormDefinitionDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto)398 Test (org.junit.Test)230 IdmFormAttributeDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto)224 IdmFormValueDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto)190 AbstractIntegrationTest (eu.bcvsolutions.idm.test.api.AbstractIntegrationTest)165 IdmIdentityDto (eu.bcvsolutions.idm.core.api.dto.IdmIdentityDto)123 IdmFormInstanceDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto)119 List (java.util.List)109 GuardedString (eu.bcvsolutions.idm.core.security.api.domain.GuardedString)108 UUID (java.util.UUID)102 IdmRoleDto (eu.bcvsolutions.idm.core.api.dto.IdmRoleDto)98 ResultCodeException (eu.bcvsolutions.idm.core.api.exception.ResultCodeException)83 Autowired (org.springframework.beans.factory.annotation.Autowired)83 ArrayList (java.util.ArrayList)82 Transactional (org.springframework.transaction.annotation.Transactional)80 SysSystemDto (eu.bcvsolutions.idm.acc.dto.SysSystemDto)77 FormService (eu.bcvsolutions.idm.core.eav.api.service.FormService)71 Serializable (java.io.Serializable)68 PersistentType (eu.bcvsolutions.idm.core.eav.api.domain.PersistentType)65 IdmIdentityContractDto (eu.bcvsolutions.idm.core.api.dto.IdmIdentityContractDto)61