package com.constellio.model.services.schemas.validators; import java.util.HashMap; import java.util.Map; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.frameworks.validation.ValidationErrors; import com.constellio.model.frameworks.validation.Validator; import com.constellio.model.services.security.AuthorizationsServices; public class RecordPermissionValidator implements Validator<Record> { public static final String UNAUTHORIZED = "userHasNoWriteAccess"; public static final String RECORD_ID = "recordId"; public static final String USERNAME = "username"; private Transaction transaction; private AuthorizationsServices authorizationsServices; public RecordPermissionValidator(Transaction transaction, AuthorizationsServices authorizationsServices) { this.transaction = transaction; this.authorizationsServices = authorizationsServices; } @Override public void validate(Record record, ValidationErrors validationErrors) { if (transaction.getUser() != null && record.isDirty() && !(record.isModified(Schemas.LOGICALLY_DELETED_STATUS) || record.isModified(Schemas.LOGICALLY_DELETED_ON))) { if (!authorizationsServices.canWrite(transaction.getUser(), record)) { addValidationErrors(validationErrors, UNAUTHORIZED, record, transaction.getUser()); } } } private void addValidationErrors(ValidationErrors validationErrors, String errorCode, Record record, User user) { Map<String, Object> parameters = new HashMap<>(); parameters.put(RECORD_ID, record.getId()); parameters.put(USERNAME, user.getUsername()); validationErrors.add(getClass(), errorCode, parameters); } }