TSK-1957: add taskana property 'minimalPermissionsToAssignDomains'
This commit is contained in:
parent
d6da6f8124
commit
5a14c00fa1
|
@ -3,8 +3,6 @@ package pro.taskana.common.internal.configuration;
|
|||
import static java.util.function.Predicate.not;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
|
@ -129,21 +127,10 @@ public class TaskanaConfigurationInitializer {
|
|||
}
|
||||
|
||||
private static void setFieldValue(Object instance, Field field, Object value) {
|
||||
final Optional<Method> hasSetterMethod =
|
||||
Arrays.stream(instance.getClass().getMethods())
|
||||
.filter(m -> m.getParameterCount() == 1)
|
||||
.filter(m -> m.getName().startsWith("set"))
|
||||
.filter(m -> m.getName().toLowerCase().contains(field.getName().toLowerCase()))
|
||||
.findFirst();
|
||||
|
||||
if (hasSetterMethod.isEmpty()) {
|
||||
throw new SystemException("No setter method for " + field.getName());
|
||||
}
|
||||
|
||||
try {
|
||||
final Method method = hasSetterMethod.get();
|
||||
method.invoke(instance, value);
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
field.setAccessible(true);
|
||||
field.set(instance, value);
|
||||
} catch (IllegalAccessException | IllegalArgumentException e) {
|
||||
throw new SystemException(
|
||||
"Property value " + value + " is invalid for field " + field.getName(), e);
|
||||
}
|
||||
|
@ -175,11 +162,29 @@ public class TaskanaConfigurationInitializer {
|
|||
@Override
|
||||
public Optional<List<?>> initialize(
|
||||
Properties properties, String separator, Field field, TaskanaProperty taskanaProperty) {
|
||||
final String typeName =
|
||||
((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0].getTypeName();
|
||||
if (!List.class.isAssignableFrom(field.getType())) {
|
||||
throw new SystemException(
|
||||
String.format(
|
||||
"Cannot initialize field '%s' because field type '%s' is not a List",
|
||||
field, field.getType()));
|
||||
}
|
||||
Class<?> genericClass =
|
||||
(Class<?>) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0];
|
||||
|
||||
if (typeName.equals("pro.taskana.common.api.CustomHoliday")) {
|
||||
CheckedFunction<String, List<?>, Exception> parseFunction2 =
|
||||
if (genericClass.isEnum()) {
|
||||
Map<String, ?> enumConstants =
|
||||
Arrays.stream(genericClass.getEnumConstants())
|
||||
.collect(Collectors.toMap(e -> e.toString().toLowerCase(), Function.identity()));
|
||||
CheckedFunction<String, List<?>, Exception> parseFunction =
|
||||
s ->
|
||||
splitStringAndTrimElements(s, separator).stream()
|
||||
.map(String::toLowerCase)
|
||||
.map(enumConstants::get)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
return parseProperty(properties, taskanaProperty.value(), parseFunction);
|
||||
} else if (CustomHoliday.class.isAssignableFrom(genericClass)) {
|
||||
CheckedFunction<String, List<?>, Exception> parseFunction =
|
||||
s ->
|
||||
splitStringAndTrimElements(s, separator).stream()
|
||||
.map(
|
||||
|
@ -193,12 +198,16 @@ public class TaskanaConfigurationInitializer {
|
|||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
return parseProperty(properties, taskanaProperty.value(), parseFunction2);
|
||||
|
||||
} else {
|
||||
return parseProperty(properties, taskanaProperty.value(), parseFunction);
|
||||
} else if (String.class.isAssignableFrom(genericClass)) {
|
||||
CheckedFunction<String, List<?>, Exception> parseListFunction =
|
||||
p -> splitStringAndTrimElements(p, ",", String::toUpperCase);
|
||||
return parseProperty(properties, taskanaProperty.value(), parseListFunction);
|
||||
} else {
|
||||
throw new SystemException(
|
||||
String.format(
|
||||
"Cannot initialize field '%s' because field type '%s' is unknown",
|
||||
field, genericClass));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,8 @@ taskana.roles.admin=name=konrad,Organisation=novatec|admin
|
|||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
taskana.domains=Domain_A , DOMAIN_B
|
||||
taskana.domains=DOMAIN_A , DOMAIN_B
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK , document
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
|
|
|
@ -3,7 +3,8 @@ taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
|||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
taskana.domains=Domain_A , DOMAIN_B
|
||||
taskana.domains=DOMAIN_A , DOMAIN_B
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK , document
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
|
|
|
@ -3,7 +3,8 @@ taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
|||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
taskana.domains=Domain_A , DOMAIN_B
|
||||
taskana.domains=DOMAIN_A , DOMAIN_B
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK , document
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
|
|
|
@ -33,6 +33,7 @@ import pro.taskana.common.internal.TaskanaEngineImpl;
|
|||
import pro.taskana.common.internal.configuration.DB;
|
||||
import pro.taskana.common.internal.configuration.TaskanaProperty;
|
||||
import pro.taskana.common.internal.util.FileLoaderUtil;
|
||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||
|
||||
/**
|
||||
* This central class creates the TaskanaEngine and holds all the information about DB and Security.
|
||||
|
@ -129,6 +130,9 @@ public class TaskanaEngineConfiguration {
|
|||
@TaskanaProperty("taskana.jobs.user.refresh.firstRunAt")
|
||||
private Instant userRefreshJobFirstRun = Instant.parse("2018-01-01T23:00:00Z");
|
||||
|
||||
@TaskanaProperty("taskana.user.minimalPermissionsToAssignDomains")
|
||||
private List<WorkbasketPermission> minimalPermissionsToAssignDomains;
|
||||
|
||||
public TaskanaEngineConfiguration(
|
||||
DataSource dataSource, boolean useManagedTransactions, String schemaName) {
|
||||
this(dataSource, useManagedTransactions, true, schemaName);
|
||||
|
@ -214,6 +218,8 @@ public class TaskanaEngineConfiguration {
|
|||
LOGGER.debug("Configured domains: {}", domains);
|
||||
LOGGER.debug("Configured classificationTypes: {}", classificationTypes);
|
||||
LOGGER.debug("Configured custom Holidays : {}", customHolidays);
|
||||
LOGGER.debug(
|
||||
"Configured minimalPermissionsToAssignDomains : {}", minimalPermissionsToAssignDomains);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -457,6 +463,15 @@ public class TaskanaEngineConfiguration {
|
|||
this.userRefreshJobRunEvery = userRefreshJobRunEvery;
|
||||
}
|
||||
|
||||
public List<WorkbasketPermission> getMinimalPermissionsToAssignDomains() {
|
||||
return minimalPermissionsToAssignDomains;
|
||||
}
|
||||
|
||||
public void setMinimalPermissionsToAssignDomains(
|
||||
List<WorkbasketPermission> minimalPermissionsToAssignDomains) {
|
||||
this.minimalPermissionsToAssignDomains = minimalPermissionsToAssignDomains;
|
||||
}
|
||||
|
||||
public Instant getUserRefreshJobFirstRun() {
|
||||
return userRefreshJobFirstRun;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import org.junit.jupiter.api.io.TempDir;
|
|||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.common.test.config.DataSourceGenerator;
|
||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||
|
||||
/** Test taskana configuration without roles. */
|
||||
class TaskanaConfigAccTest {
|
||||
|
@ -36,6 +37,12 @@ class TaskanaConfigAccTest {
|
|||
.containsExactlyInAnyOrder("DOMAIN_A", "DOMAIN_B");
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ConfigureMinimalPermissionsToAssignDomains_For_DefaultPropertiesFile() {
|
||||
assertThat(taskanaEngineConfiguration.getMinimalPermissionsToAssignDomains())
|
||||
.containsExactly(WorkbasketPermission.READ, WorkbasketPermission.OPEN);
|
||||
}
|
||||
|
||||
@Test
|
||||
void should_ConfigureClassificationTypes_For_DefaultPropertiesFile() {
|
||||
assertThat(taskanaEngineConfiguration.getClassificationTypes())
|
||||
|
|
|
@ -4,7 +4,8 @@ taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test
|
|||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
taskana.roles.taskrouter=cn=routers,cn=groups,OU=Test,O=TASKANA | user-taskrouter
|
||||
taskana.domains=Domain_A , DOMAIN_B
|
||||
taskana.domains=DOMAIN_A , DOMAIN_B
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK , document
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
|
|
|
@ -2,12 +2,11 @@ taskana.roles.user=cn=ksc-users,cn=groups,OU=Test,O=TASKANA | teamlead-1 | teaml
|
|||
taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
||||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
|
||||
taskana.domains= Domain_A , DOMAIN_B
|
||||
taskana.classification.types= TASK , document
|
||||
taskana.classification.categories.task= EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document= EXTERNAL
|
||||
|
||||
taskana.domains=DOMAIN_A , DOMAIN_B
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK , document
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
taskana.jobs.cleanup.schedule=0 0 3 * * *
|
||||
taskana.jobs.cleanup.runEvery=P1D
|
||||
taskana.jobs.cleanup.firstRunAt=2018-07-25T08:00:00Z
|
||||
|
|
|
@ -3,7 +3,8 @@ taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
|||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
taskana.domains=Domain_A , DOMAIN_B
|
||||
taskana.domains=DOMAIN_A , DOMAIN_B
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK , document
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
taskana.roles.user= cn=ksc-users,cn=groups,OU=Test,O=TASKANA | teamlead-1 | teamlead-2 | user-1-1 | user-1-2 | user-2-1 | user-2-2 | user-b-1 | user-b-2
|
||||
taskana.roles.user=cn=ksc-users,cn=groups,OU=Test,O=TASKANA | teamlead-1 | teamlead-2 | user-1-1 | user-1-2 | user-2-1 | user-2-2 | user-b-1 | user-b-2
|
||||
taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
||||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
|
||||
taskana.domains=DOMAIN_A,DOMAIN_B,DOMAIN_C,DOMAIN_TEST
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK,DOCUMENT
|
||||
taskana.classification.categories.task= EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document= EXTERNAL
|
||||
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
taskana.jobs.maxRetries=3
|
||||
taskana.jobs.batchSize=50
|
||||
taskana.jobs.cleanup.runEvery=P1D
|
||||
|
@ -23,5 +22,4 @@ taskana.jobs.user.refresh.firstRunAt=2018-07-25T23:00:00Z
|
|||
taskana.german.holidays.enabled=true
|
||||
taskana.german.holidays.corpus-christi.enabled=true
|
||||
taskana.historylogger.name=AUDIT
|
||||
|
||||
taskana.routing.dmn=/dmn-table.dmn
|
||||
|
|
|
@ -4,6 +4,7 @@ taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test
|
|||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
taskana.domains=DOMAIN_A,DOMAIN_B,DOMAIN_C,DOMAIN_TEST
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK,DOCUMENT
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
|
|
|
@ -3,12 +3,11 @@ taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
|||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
|
||||
taskana.domains=DOMAIN_A,DOMAIN_B,DOMAIN_C,DEFAULT_DOMAIN,DOMAIN_TEST
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK,DOCUMENT
|
||||
taskana.classification.categories.task= EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document= EXTERNAL
|
||||
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
taskana.jobs.maxRetries=3
|
||||
taskana.jobs.batchSize=50
|
||||
taskana.jobs.cleanup.runEvery=P1D
|
||||
|
|
|
@ -4,6 +4,7 @@ taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test
|
|||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
taskana.domains=DOMAIN_A,DOMAIN_B,DOMAIN_C,DOMAIN_TEST
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK,DOCUMENT
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
|
|
|
@ -3,12 +3,11 @@ taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
|||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
|
||||
taskana.domains=DOMAIN_A,DOMAIN_B,DOMAIN_C,DOMAIN_TEST
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK,DOCUMENT
|
||||
taskana.classification.categories.task= EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document= EXTERNAL
|
||||
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
taskana.jobs.maxRetries=3
|
||||
taskana.jobs.batchSize=50
|
||||
taskana.jobs.cleanup.runEvery=P1D
|
||||
|
|
|
@ -3,12 +3,11 @@ taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
|||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
|
||||
taskana.domains=DOMAIN_A,DOMAIN_B,DOMAIN_C,DOMAIN_TEST
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK,DOCUMENT
|
||||
taskana.classification.categories.task= EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document= EXTERNAL
|
||||
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
taskana.jobs.maxRetries=3
|
||||
taskana.jobs.batchSize=50
|
||||
taskana.jobs.cleanup.runEvery=P1D
|
||||
|
|
|
@ -3,12 +3,11 @@ taskana.roles.admin=admin | uid=admin,cn=users,OU=Test,O=TASKANA
|
|||
taskana.roles.businessadmin=businessadmin | cn=business-admins,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.monitor=monitor | cn=monitor-users,cn=groups,OU=Test,O=TASKANA
|
||||
taskana.roles.taskadmin=taskadmin
|
||||
|
||||
taskana.domains=DOMAIN_A,DOMAIN_B,DOMAIN_C
|
||||
taskana.user.minimalPermissionsToAssignDomains=READ | OPEN
|
||||
taskana.classification.types=TASK,DOCUMENT
|
||||
taskana.classification.categories.task= EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document= EXTERNAL
|
||||
|
||||
taskana.classification.categories.task=EXTERNAL, manual, autoMAtic, Process
|
||||
taskana.classification.categories.document=EXTERNAL
|
||||
taskana.jobs.maxRetries=3
|
||||
taskana.jobs.batchSize=50
|
||||
taskana.jobs.cleanup.runEvery=P1D
|
||||
|
@ -21,5 +20,4 @@ taskana.jobs.history.cleanup.runEvery=P1D
|
|||
taskana.german.holidays.enabled=true
|
||||
taskana.german.holidays.corpus-christi.enabled=true
|
||||
taskana.historylogger.name=AUDIT
|
||||
|
||||
taskana.routing.dmn=/dmn-table.dmn
|
||||
|
|
Loading…
Reference in New Issue