Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JBPM-6068 - RuntimeDataService task queries should use roles of the p… #871

Merged
merged 1 commit into from Jun 7, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -20,6 +20,7 @@
import java.util.List;

import org.kie.api.command.Command;
import org.kie.api.task.UserGroupCallback;
import org.kie.internal.command.ProcessInstanceIdCommand;
import org.kie.internal.identity.IdentityProvider;

Expand Down Expand Up @@ -54,4 +55,15 @@ public static List<String> getAuthenticatedUserRoles(IdentityProvider identityPr

return roles;
}

// to compensate https://hibernate.atlassian.net/browse/HHH-8091 add empty element to the roles in case it's empty
public static List<String> getCallbackUserRoles(UserGroupCallback userGroupCallback, String userId) {
List<String> roles = userGroupCallback != null ? userGroupCallback.getGroupsForUser(userId) : new ArrayList<>();
if (roles == null || roles.isEmpty()) {
roles = new ArrayList<>();
roles.add("");
}

return roles;
}
}
@@ -1,9 +1,8 @@
/*
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
Expand All @@ -12,13 +11,13 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
*/

package org.jbpm.kie.services.impl;

import static java.util.Objects.requireNonNull;
import static org.kie.internal.query.QueryParameterIdentifiers.FILTER;
import static org.jbpm.kie.services.impl.CommonUtils.*;
import static org.jbpm.kie.services.impl.CommonUtils.getCallbackUserRoles;

import java.text.MessageFormat;
import java.util.ArrayList;
Expand All @@ -39,6 +38,7 @@
import org.jbpm.kie.services.api.DeploymentIdResolver;
import org.jbpm.kie.services.impl.model.ProcessAssetDesc;
import org.jbpm.kie.services.impl.security.DeploymentRolesManager;
import org.jbpm.runtime.manager.impl.identity.UserDataServiceProvider;
import org.jbpm.services.api.DeploymentEvent;
import org.jbpm.services.api.DeploymentEventListener;
import org.jbpm.services.api.RuntimeDataService;
Expand All @@ -59,6 +59,7 @@
import org.kie.api.task.TaskService;
import org.kie.api.task.model.Status;
import org.kie.api.task.model.TaskSummary;
import org.kie.api.task.UserGroupCallback;
import org.kie.internal.identity.IdentityProvider;
import org.kie.internal.process.CorrelationKey;
import org.kie.internal.query.QueryFilter;
Expand All @@ -84,6 +85,8 @@ public class RuntimeDataServiceImpl implements RuntimeDataService, DeploymentEve
protected TaskAuditService taskAuditService;

private DeploymentRolesManager deploymentRolesManager = new DeploymentRolesManager();

private UserGroupCallback userGroupCallback = UserDataServiceProvider.getUserGroupCallback();

private static final List<Status> allActiveStatus = Arrays.asList(new Status[]{
Status.Created,
Expand All @@ -107,6 +110,13 @@ public void setIdentityProvider(IdentityProvider identityProvider) {
this.identityProvider = identityProvider;
}

public void setUserGroupCallback(UserGroupCallback userGroupCallback) {
this.userGroupCallback = userGroupCallback;
}

public UserGroupCallback getUserGroupCallback() {
return userGroupCallback;
}

public void setTaskService(TaskService taskService) {
this.taskService = taskService;
Expand Down Expand Up @@ -809,7 +819,7 @@ public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, QueryFi

Map<String, Object> params = new HashMap<String, Object>();
params.put("userId", userId);
params.put("groupIds", getAuthenticatedUserRoles(identityProvider));
params.put("groupIds", getCallbackUserRoles(userGroupCallback, userId));
params.put("status", allActiveStatus);

applyQueryContext(params, filter);
Expand All @@ -822,7 +832,7 @@ public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, QueryFi
public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, QueryFilter filter) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("userId", userId);
params.put("groupIds", getAuthenticatedUserRoles(identityProvider));
params.put("groupIds", getCallbackUserRoles(userGroupCallback, userId));

applyQueryContext(params, filter);
applyQueryFilter(params, filter);
Expand All @@ -833,7 +843,7 @@ public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<St
public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, List<Status> status, QueryFilter filter) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("userId", userId);
params.put("groupIds", adoptList(groupIds, getAuthenticatedUserRoles(identityProvider)));
params.put("groupIds", adoptList(groupIds, getCallbackUserRoles(userGroupCallback, userId)));
params.put("status", adoptList(status, allActiveStatus));

applyQueryContext(params, filter);
Expand All @@ -845,7 +855,7 @@ public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<St
public List<TaskSummary> getTasksAssignedAsPotentialOwnerByStatus(String userId, List<Status> status, QueryFilter filter) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("userId", userId);
params.put("groupIds", getAuthenticatedUserRoles(identityProvider));
params.put("groupIds", getCallbackUserRoles(userGroupCallback, userId));
params.put("status", adoptList(status, allActiveStatus));

applyQueryContext(params, filter);
Expand Down Expand Up @@ -945,7 +955,7 @@ public List<TaskSummary> getTasksAssignedAsBusinessAdministratorByStatus(String
Map<String, Object> params = new HashMap<String, Object>();
params.put("userId", userId);
params.put("status", adoptList(statuses, allActiveStatus));
params.put("groupIds", getAuthenticatedUserRoles(identityProvider));
params.put("groupIds", getCallbackUserRoles(userGroupCallback, userId));
applyQueryContext(params, filter);
applyQueryFilter(params, filter);
return (List<TaskSummary>) commandService.execute(
Expand Down Expand Up @@ -1070,7 +1080,7 @@ public List<AuditTask> getAllGroupAuditTask(String userId, QueryFilter filter){

List<String> owners = new ArrayList<String>();
owners.add(userId);
owners.addAll(getAuthenticatedUserRoles(identityProvider));
owners.addAll(getCallbackUserRoles(userGroupCallback, userId));

Map<String, Object> params = new HashMap<String, Object>();
params.put("potentialOwners", owners);
Expand All @@ -1086,7 +1096,7 @@ public List<AuditTask> getAllGroupAuditTask(String userId, QueryFilter filter){
public List<AuditTask> getAllAdminAuditTask(String userId, QueryFilter filter){
List<String> businessAdmins = new ArrayList<String>();
businessAdmins.add(userId);
businessAdmins.addAll(getAuthenticatedUserRoles(identityProvider));
businessAdmins.addAll(getCallbackUserRoles(userGroupCallback, userId));

Map<String, Object> params = new HashMap<String, Object>();
params.put("businessAdmins", businessAdmins);
Expand Down
Expand Up @@ -26,6 +26,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Arrays;

import org.assertj.core.api.Assertions;
import org.drools.compiler.kie.builder.impl.InternalKieModule;
Expand All @@ -47,6 +48,7 @@
import org.kie.api.runtime.process.ProcessInstance;
import org.kie.api.task.model.OrganizationalEntity;
import org.kie.api.task.model.TaskSummary;
import org.kie.api.task.model.Status;
import org.kie.internal.query.QueryFilter;
import org.kie.internal.runtime.conf.ObjectModel;
import org.kie.internal.task.api.TaskModelFactory;
Expand Down Expand Up @@ -324,11 +326,15 @@ public void testRemoveBusinessAdmin() {

List<TaskSummary> tasks = runtimeDataService.getTasksAssignedAsBusinessAdministrator("Administrator", new QueryFilter());
Assertions.assertThat(tasks).hasSize(1);
TaskSummary task = tasks.get(0);
TaskSummary task = tasks.get(0);

userTaskAdminService.removeBusinessAdmins(task.getId(), factory.newUser("Administrator"));

List<Status> readyStatuses = Arrays.asList(new Status[]{
org.kie.api.task.model.Status.Ready
});

tasks = runtimeDataService.getTasksAssignedAsBusinessAdministrator("Administrator", new QueryFilter());
tasks = runtimeDataService.getTasksAssignedAsBusinessAdministratorByStatus("Administrator", readyStatuses, new QueryFilter());
Assertions.assertThat(tasks).hasSize(0);
}

Expand Down