diff --git a/engine/src/main/java/com/arcadedb/database/EmbeddedDatabase.java b/engine/src/main/java/com/arcadedb/database/EmbeddedDatabase.java index 34740ede5..90d3fd841 100644 --- a/engine/src/main/java/com/arcadedb/database/EmbeddedDatabase.java +++ b/engine/src/main/java/com/arcadedb/database/EmbeddedDatabase.java @@ -74,6 +74,7 @@ import com.arcadedb.utility.LockException; import com.arcadedb.utility.MultiIterator; import com.arcadedb.utility.RWLockContext; +import lombok.extern.slf4j.Slf4j; import java.io.*; import java.nio.channels.*; @@ -855,8 +856,12 @@ public void updateRecord(final Record record) { if (mode == PaginatedFile.MODE.READ_ONLY) throw new DatabaseIsReadOnlyException("Cannot update a record"); - if (record instanceof MutableDocument) - ((MutableDocument) record).validateAndAccmCheck(getContext().getCurrentUser()); + if (record instanceof MutableDocument) { + var rec = (MutableDocument) record; + var context = DatabaseContext.INSTANCE.getContext(rec.database.getDatabasePath()); + if (context.getCurrentUser() != null) + rec.validateAndAccmCheck(context.getCurrentUser()); + } // INVOKE EVENT CALLBACKS if (!events.onBeforeUpdate(record)) diff --git a/server/src/main/java/com/arcadedb/server/http/handler/PostRollbackHistoryHandler.java b/server/src/main/java/com/arcadedb/server/http/handler/PostRollbackHistoryHandler.java index 0fc548cba..83a383793 100644 --- a/server/src/main/java/com/arcadedb/server/http/handler/PostRollbackHistoryHandler.java +++ b/server/src/main/java/com/arcadedb/server/http/handler/PostRollbackHistoryHandler.java @@ -4,11 +4,10 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Deque; +import java.util.Map; -import com.arcadedb.database.MutableDocument; -import com.arcadedb.database.RID; +import com.arcadedb.database.*; import com.arcadedb.database.Record; -import com.arcadedb.database.Utils; import com.arcadedb.serializer.json.JSONObject; import com.arcadedb.server.ArcadeDBServer; import com.arcadedb.server.DataFabricRestClient; @@ -100,13 +99,22 @@ protected ExecutionResponse execute(HttpServerExchange exchange, ServerSecurityU var payload = new JSONObject(value).getJSONObject("history").getString("entity"); var content = new JSONObject(payload); - final ArcadeDBServer server = httpServer.getServer(); var activeDatabase = server.getDatabase(database); Record record = server.getDatabase(database).lookupByRID(new RID(activeDatabase, rid), true); + Map classification = null; + if (activeDatabase.getSchema().getEmbedded().isClassificationValidationEnabled()) { + var classificationObj = (JSONObject)content.remove(MutableDocument.CLASSIFICATION_PROPERTY); + classification = classificationObj.toMap(); + } MutableDocument mutable = record.asDocument().modify(); mutable.fromJSON(content); + mutable.set(MutableDocument.CLASSIFICATION_PROPERTY, classification); + + if (activeDatabase.getSchema().getEmbedded().isClassificationValidationEnabled()) { + mutable.set(MutableDocument.CLASSIFICATION_PROPERTY, classification); + } LocalDateTime createdDate = null; if (record.asDocument().get(Utils.CREATED_DATE) instanceof Long) { @@ -131,7 +139,8 @@ protected ExecutionResponse execute(HttpServerExchange exchange, ServerSecurityU return new ExecutionResponse(200, "{ \"result\" : \"Success\"}"); } catch (Exception e) { - log.error("Error handling history rollback request.", e.getMessage()); + e.printStackTrace(); + log.error("Error handling history rollback request. Error {}", e.getMessage()); log.debug("Exception", e); } return new ExecutionResponse(400, "{ \"error\" : \"Request failed\"}");