diff --git a/src/main/java/caosdb/server/ServerProperties.java b/src/main/java/caosdb/server/ServerProperties.java index 32d7fa32c3fa5fc9c5d36e2c01cf3bef063acb20..1cd6078e7e0be9f061f7f985f2b11015f7c594dc 100644 --- a/src/main/java/caosdb/server/ServerProperties.java +++ b/src/main/java/caosdb/server/ServerProperties.java @@ -121,6 +121,8 @@ public class ServerProperties extends Properties { public static final String KEY_NO_REPLY_NAME = "NO_REPLY_NAME"; + public static final String KEY_CHECK_ENTITY_ACL_ROLES_MODE = "CHECK_ENTITY_ACL_ROLES_MODE"; + /** * This init_server_properties method reads the config file which contains key-value-pairs for * such variables like the user name of the database, the port the server will be listening on @@ -200,6 +202,8 @@ public class ServerProperties extends Properties { serverProperties.setProperty(KEY_SUDO_PASSWORD, ""); serverProperties.setProperty(KEY_QUERY_FILTER_ENTITIES_WITHOUT_RETRIEVE_PERMISSIONS, "TRUE"); + serverProperties.setProperty(KEY_CHECK_ENTITY_ACL_ROLES_MODE, "MUST"); + try { final File confFile = new File(basepath + "/conf/ext/server.conf"); if (confFile.exists()) { diff --git a/src/main/java/caosdb/server/jobs/core/CheckEntityACLRoles.java b/src/main/java/caosdb/server/jobs/core/CheckEntityACLRoles.java index a0a3c72a405d5d62923c17cd5ef7dc77a7d0e7bb..1106a469efda9767e95076378eea958fd10c7b70 100644 --- a/src/main/java/caosdb/server/jobs/core/CheckEntityACLRoles.java +++ b/src/main/java/caosdb/server/jobs/core/CheckEntityACLRoles.java @@ -22,6 +22,8 @@ */ package caosdb.server.jobs.core; +import caosdb.server.CaosDBServer; +import caosdb.server.ServerProperties; import caosdb.server.accessControl.AuthenticationUtils; import caosdb.server.entity.EntityInterface; import caosdb.server.jobs.ContainerJob; @@ -43,8 +45,15 @@ public class CheckEntityACLRoles extends ContainerJob { if (entity.getEntityACL() != null) { for (final EntityACI aci : entity.getEntityACL().getRules()) { if (!AuthenticationUtils.isResponsibleAgentExistent(aci.getResponsibleAgent())) { - entity.addError(ServerMessages.ROLE_DOES_NOT_EXIST); - entity.setEntityStatus(EntityStatus.UNQUALIFIED); + if (CaosDBServer.getServerProperty(ServerProperties.KEY_CHECK_ENTITY_ACL_ROLES_MODE) + .equalsIgnoreCase("MUST")) { + entity.addError(ServerMessages.ROLE_DOES_NOT_EXIST); + entity.setEntityStatus(EntityStatus.UNQUALIFIED); + } else { + entity.addWarning(ServerMessages.ROLE_DOES_NOT_EXIST); + } + entity.addInfo( + "User Role `" + aci.getResponsibleAgent().toString() + "` does not exist."); } } } diff --git a/src/main/java/caosdb/server/utils/ServerMessages.java b/src/main/java/caosdb/server/utils/ServerMessages.java index 63cadf5f3a0eedca04e8dab21a0213a81bf2bd3c..454834e2e065d9bd9359f73b8efbe0d19eae8c1e 100644 --- a/src/main/java/caosdb/server/utils/ServerMessages.java +++ b/src/main/java/caosdb/server/utils/ServerMessages.java @@ -270,7 +270,7 @@ public class ServerMessages { new Message(MessageType.Error, 0, "Cannot parse EntityACL."); public static final Message ROLE_DOES_NOT_EXIST = - new Message(MessageType.Error, 1104, "Role does not exist."); + new Message(MessageType.Error, 1104, "User Role does not exist."); public static final Message ENTITY_NAME_DUPLICATES = new Message(MessageType.Error, 0, "This entity cannot be identified due to name duplicates.");