use of org.kie.kogito.auth.SecurityPolicy in project kogito-runtimes by kiegroup.
the class KafkaProcessInstancesIT method testBasicFlow.
@Test
void testBasicFlow() {
BpmnProcess process = BpmnProcess.from(new ClassPathResource("BPMN2-UserTask.bpmn2")).get(0);
listener.setKafkaStreams(createStreams(process));
process.setProcessInstancesFactory(factory);
process.configure();
listener.getKafkaStreams().start();
ProcessInstances<BpmnVariables> instances = process.instances();
assertThat(instances.size()).isZero();
ProcessInstance<BpmnVariables> processInstance = process.createInstance(BpmnVariables.create(singletonMap("test", "test")));
processInstance.start();
assertEquals(STATE_ACTIVE, processInstance.status());
await().until(() -> instances.values().size() == 1);
SecurityPolicy asJohn = SecurityPolicy.of(IdentityProviders.of("john"));
assertThat(instances.values().iterator().next().workItems(asJohn)).hasSize(1);
List<WorkItem> workItems = processInstance.workItems(asJohn);
assertThat(workItems).hasSize(1);
WorkItem workItem = workItems.get(0);
assertEquals("john", workItem.getParameters().get("ActorId"));
processInstance.completeWorkItem(workItem.getId(), null, asJohn);
assertEquals(STATE_COMPLETED, processInstance.status());
assertThat(instances.size()).isZero();
}
use of org.kie.kogito.auth.SecurityPolicy in project kogito-runtimes by kiegroup.
the class HumanTaskServiceImpl method get.
@Override
public ExtendedDataContext get(LocalId id, MetaDataContext meta) {
TaskMetaDataContext metaCtx = meta.as(TaskMetaDataContext.class);
SecurityPolicy securityPolicy = convertPolicyObject(metaCtx.policy());
try {
// /tasks
TaskIds taskIds = ProcessIdParser.select(id, TaskIds.class);
ProcessInstanceId instanceId = taskIds.processInstanceId();
Process<MappableToModel<Model>> process = parseProcess(instanceId.processId());
String processInstanceIdString = instanceId.processInstanceId();
List<String> tasks = svc.getTasks(process, processInstanceIdString, securityPolicy).orElseThrow().stream().map(wi -> taskIds.get(wi.getName()).instances().get(wi.getId()).asLocalUri().path()).collect(Collectors.toList());
MapDataContext mdc = MapDataContext.create();
mdc.set("tasks", tasks);
return ExtendedDataContext.of(mdc, EmptyDataContext.Instance);
} catch (IllegalArgumentException e) {
// /tasks/id
TaskInstanceId taskInstanceId = ProcessIdParser.select(id, TaskInstanceId.class);
ProcessInstanceId instanceId = taskInstanceId.taskId().processInstanceId();
Process<MappableToModel<Model>> process = parseProcess(instanceId.processId());
String taskInstanceIdString = taskInstanceId.taskInstanceId();
String processInstanceIdString = instanceId.processInstanceId();
WorkItem workItem = svc.getTask(process, processInstanceIdString, taskInstanceIdString, securityPolicy, Function.identity()).orElseThrow(() -> new IllegalArgumentException("Cannot find ID " + id.asLocalUri().path()));
return ExtendedDataContext.ofData(MapDataContext.of(workItem.getResults()));
}
}
use of org.kie.kogito.auth.SecurityPolicy in project kogito-runtimes by kiegroup.
the class HumanTaskServiceImpl method transition.
@Override
public ExtendedDataContext transition(LocalId id, DataContext dataContext) {
ExtendedDataContext edc = dataContext.as(ExtendedDataContext.class);
TaskMetaDataContext mdc = edc.meta().as(TaskMetaDataContext.class);
SecurityPolicy securityPolicy = convertPolicyObject(mdc.policy());
String phase = mdc.phase();
Objects.requireNonNull(phase, "Phase must be specified");
TaskInstanceId taskInstanceId = ProcessIdParser.select(id, TaskInstanceId.class);
// must validate the task id
TaskId taskId = taskInstanceId.taskId();
ProcessInstanceId instanceId = taskId.processInstanceId();
Process<MappableToModel<Model>> process = parseProcess(instanceId.processId());
Collection<KogitoNode> tasks = process.findNodes(n -> n instanceof HumanTaskNode && ((HumanTaskNode) n).getWork().getParameter("TaskName").equals(taskId.taskId()));
if (tasks.isEmpty()) {
throw new IllegalArgumentException("No such taskId " + taskId.taskId());
}
String taskInstanceIdString = taskInstanceId.taskInstanceId();
String processInstanceIdString = instanceId.processInstanceId();
Map<String, Object> map = dataContext.as(MapDataContext.class).toMap();
MappableToModel<Model> model = process.createModel();
model.fromMap(map);
Model result = svc.taskTransition(process, processInstanceIdString, taskInstanceIdString, phase, securityPolicy, model).orElseThrow();
return ExtendedDataContext.ofData(MapDataContext.of(result.toMap()));
}
use of org.kie.kogito.auth.SecurityPolicy in project kogito-runtimes by kiegroup.
the class HumanTaskServiceImpl method update.
@Override
public ExtendedDataContext update(LocalId id, DataContext dataContext) {
ExtendedDataContext edc = dataContext.as(ExtendedDataContext.class);
TaskMetaDataContext mdc = edc.meta().as(TaskMetaDataContext.class);
SecurityPolicy securityPolicy = convertPolicyObject(mdc.policy());
TaskInstanceId taskInstanceId = ProcessIdParser.select(id, TaskInstanceId.class);
ProcessInstanceId instanceId = taskInstanceId.taskId().processInstanceId();
Process<MappableToModel<Model>> process = parseProcess(instanceId.processId());
String taskInstanceIdString = taskInstanceId.taskInstanceId();
String processInstanceIdString = instanceId.processInstanceId();
Map<String, Object> map = dataContext.as(MapDataContext.class).toMap();
Map<String, Object> result = UnitOfWorkExecutor.executeInUnitOfWork(application.unitOfWorkManager(), () -> process.instances().findById(processInstanceIdString).map(pi -> {
pi.updateWorkItem(taskInstanceIdString, wi -> HumanTaskHelper.updateContent(wi, map), securityPolicy);
return pi.variables().toModel();
})).orElseThrow().toMap();
return ExtendedDataContext.ofData(MapDataContext.of(result));
}
use of org.kie.kogito.auth.SecurityPolicy in project kogito-runtimes by kiegroup.
the class CacheProcessInstancesIT method testBasicFlow.
@Test
void testBasicFlow() {
BpmnProcess process = BpmnProcess.from(new ClassPathResource("BPMN2-UserTask.bpmn2")).get(0);
process.setProcessInstancesFactory(new CacheProcessInstancesFactory(cacheManager));
process.configure();
ProcessInstance<BpmnVariables> processInstance = process.createInstance(BpmnVariables.create(Collections.singletonMap("test", "test")));
processInstance.start();
assertEquals(STATE_ACTIVE, processInstance.status());
assertThat(process.instances().size()).isOne();
SecurityPolicy asJohn = SecurityPolicy.of(new StaticIdentityProvider("john"));
assertThat(process.instances().values().iterator().next().workItems(asJohn)).hasSize(1);
List<WorkItem> workItems = processInstance.workItems(asJohn);
assertThat(workItems).hasSize(1);
WorkItem workItem = workItems.get(0);
assertEquals("john", workItem.getParameters().get("ActorId"));
processInstance.completeWorkItem(workItem.getId(), null, asJohn);
assertEquals(STATE_COMPLETED, processInstance.status());
assertThat(process.instances().size()).isZero();
}
Aggregations