Line 1: |
|
|
+ |
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:''
|
|
|
|
|
|
|
+ |
<pre>
|
|
|
+ |
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;
|
|
|
+ |
</pre>
|
|
|
|
|
|
|
+ |
----
|
|
|
|
|
|
|
+ |
''Report Script:''
|
|
|
|
|
|
|
+ |
<pre>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;
|
|
|
+ |
</pre>
|
|
|
|
|
|
|
+ |
----
|
|
|
|
|
|
|
+ |
'''Related Content'''
|
|
|
|
|
|
|
+ |
[[AnthillPro Template Reports]]<br/>
|
|
|
+ |
[[Report Templates]]
|