This report will tell you all the users who have permissions to execute a workflow. This report will either be recursive for all the workflows in a folder or it will be for every workflow in the sytem. This report has to be used in conjunction with a report template such as the HTML Template.
Meta-Data Script:
import com.urbancode.anthill3.domain.reporting.*; ReportMetaData rmd = new ReportMetaData(); TextParamMetaData folderParam = new TextParamMetaData(); folderParam.setName("folderName"); folderParam.setLabel("Folder"); folderParam.setDescription("The Team/Group Folder name or All for All Projects"); folderParam.setRequired(true); folderParam.setDefaultValue("All"); rmd.addParameter(folderParam); // Configure columns rmd.addColumn("Workflow"); rmd.addColumn("Project"); rmd.addColumn("Username"); rmd.addColumn("First"); rmd.addColumn("Last"); rmd.addColumn("Realm"); rmd.addColumn("Relevant Roles"); // Lastly, return the meta data return rmd;
Report Script:
import com.urbancode.anthill3.domain.agent.*; import com.urbancode.anthill3.domain.folder.*; import com.urbancode.anthill3.domain.workflow.*; import com.urbancode.anthill3.domain.project.*; import com.urbancode.anthill3.domain.reporting.*; import com.urbancode.anthill3.domain.security.*; import com.urbancode.anthill3.domain.userprofile.*; import org.apache.commons.lang.StringUtils; ReportRow createReportRow(Workflow workflow, User user, UserProfile profile, String relevantRoles) { ReportRow result = null; result = new ReportRow(output, "User"); result.setColumnValue("Workflow", workflow.getName()); result.setColumnValue("Project", workflow.getProject().getName()); result.setColumnValue("Username", user.getName()); if (profile != null) { if (StringUtils.isNotEmpty(profile.getFirstName())) { result.setColumnValue("First", profile.getFirstName()); } if (StringUtils.isNotEmpty(profile.getLastName())) { result.setColumnValue("Last", profile.getLastName()); } } result.setColumnValue("Realm", user.getAuthenticationRealm().getName()); result.setColumnValue("Relevant Roles", relevantRoles); return result; } Set retrieveWorkflowsForFolder(Folder folder) { Set result = new HashSet(); Folder[] childFolders = folder.getChildren(); for (int i = 0; i < childFolders.length; i++) { Folder childFolder = childFolders[i]; result.addAll(retrieveWorkflowsForFolder(childFolder)); } Project[] folderProjects = folder.getProjects(); for (int i = 0; i < folderProjects.length; i++) { Project project = folderProjects[i]; result.addAll(Arrays.asList(project.getWorkflowArray())); } return result; } List retrieveRelevantRoles(Workflow workflow) { List result = new ArrayList(); Resource workflowResource = ResourceFactory.getInstance().restoreForPersistent(workflow); Permission[] permissions = PermissionFactory.getInstance().restoreAllForResource(workflowResource); for (int i = 0; i < permissions.length; i++) { Permission perm = permissions[i]; if (perm.getAction().equals("execute")) { result.add(perm.getRole()); } } return result; } Folder resolveFolderFromName() { Folder result = null; String pathStr = folderName.replaceAll("\\\\", "/"); String[] path = pathStr.split("/"); result = FolderFactory.getInstance().restoreForName(path[0]); for (int i = 1; result != null && i < path.length; i++) { Folder[] childFolders = result.getChildren(); boolean found = false; for (int j = 0; !found && j < childFolders.length; j++) { Folder childFolder = childFolders[j]; if (childFolder.getName().equals(path[i])) { result = childFolder; found = true; } } if (!found) { result = null; } } return result; } void populateAndSortWorkflowsArray(Folder folder) { Set workflowSet = retrieveWorkflowsForFolder(folder); workflows = new Workflow[workflowSet.size()]; workflowSet.toArray(workflows); Arrays.sort(workflows, new Comparator() { public int compare(Object obj1, Object obj2) { Workflow workflow1 = (Workflow) obj1; Workflow workflow2 = (Workflow) obj2; return workflow1.getName().compareTo(workflow2.getName()); } } ); } Workflow[] workflows = null; if (folderName.equals("All")) { workflows = WorkflowFactory.getInstance().restoreAll(); } else { Folder folder = resolveFolderFromName(); if (folder != null) { populateAndSortWorkflowsArray(folder); } } ReportOutput output = new ReportOutput(metaData); for (int i = 0; workflows != null && i < workflows.length; i++) { Workflow workflow = workflows[i]; // This list is incomplete, only includes roles runner has List relevantRoles = retrieveRelevantRoles(workflow); User[] users = Authority.getInstance().getUsersWithPermissionToPersistent(workflow, "execute"); for (int j = 0; j < users.length; j++) { User user = users[j]; UserProfile profile = UserProfileFactory.getInstance().restoreForUser(user); String relevantRoleNames = ""; for (int k = 0; k < relevantRoles.size(); k++) { Role role = (Role) relevantRoles.get(k); if (user.hasRole(role)) { if (StringUtils.isNotEmpty(relevantRoleNames)) { relevantRoleNames += ", "; } relevantRoleNames += role.getName(); } } ReportRow row = null; if (StringUtils.isNotEmpty(relevantRoleNames)) { row = createReportRow(workflow, user, profile, relevantRoleNames); } else { row = createReportRow(workflow, user, profile, "Protected"); } output.addRow(row); } } return output;
Related Content