Permissions Per Agent

This report will show who has access to which agents in the system, meaning read permissions. This report has to be used in conjunction with a report template such as the Bar Chart Template.


Meta-Data Script:

//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 Envs");
folderParam.setRequired(true);
folderParam.setDefaultValue("All");

rmd.addParameter(folderParam);

// Configure columns
rmd.addColumn("AgentName");
rmd.addColumn("Environment");
rmd.addColumn("Username");
rmd.addColumn("First");
rmd.addColumn("Last");
rmd.addColumn("Realm");
rmd.addColumn("Relevant Roles");

// Lastly, return the meta data
return rmd; 

Context Script:

import com.urbancode.anthill3.domain.agent.*;
import com.urbancode.anthill3.domain.folder.*;
import com.urbancode.anthill3.domain.project.*;
import com.urbancode.anthill3.domain.reporting.*;
import com.urbancode.anthill3.domain.security.*;
import com.urbancode.anthill3.domain.servergroup.*;
import com.urbancode.anthill3.domain.userprofile.*;
import com.urbancode.devilfish.client.ServiceEndpoint;
import org.apache.commons.lang.StringUtils;

ReportRow createReportRow(Agent agent,
                          ServerGroup environment,
                          User user,
                          UserProfile profile,
                          String relevantRoles) {
  ReportRow result = null;

result = new ReportRow(output, "User");
  result.setColumnValue("AgentName", agent.getName());
  result.setColumnValue("Environment", environment.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 retrieveEnvironmentsForFolder(Folder folder) {
  Set result = new HashSet();
  
Folder[] childFolders = folder.getChildren();
  for (int i = 0; i < childFolders.length; i++) {
    Folder childFolder = childFolders[i];
    result.addAll(retrieveEnvironmentsForFolder(childFolder));
  }

Project[] folderProjects = folder.getProjects();
  for (int i = 0; i < folderProjects.length; i++) {
    Project project = folderProjects[i];
    ServerGroup[] serverGroups = project.getEnvironmentGroup().getServerGroupArray();
    result.addAll(Arrays.asList(serverGroups));
  }

return result;
}

List retrieveRelevantRoles(ServerGroup environment) {
  List result = new ArrayList();

Resource envResource = ResourceFactory.getInstance().restoreForPersistent(environment);
  Permission[] permissions = PermissionFactory.getInstance().restoreAllForResource(envResource);

for (int i = 0; i < permissions.length; i++) {
    Permission perm = permissions[i];
    if (perm.getAction().equals("read")) {
      result.add(perm.getRole());
    }
  }

return result;
}

Agent retrieveAgentForEndpoint(ServiceEndpoint endpoint) {
  Agent result = null;

if (endpointsToAgents.containsKey(endpoint)) {
    result = (Agent) endpointsToAgents.get(endpoint);
  }
  else {
    result = AgentFactory.getInstance().restoreByEndpoint(endpoint);
    endpointsToAgents.put(endpoint, result);
  }

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 populateAndSortEnvironmentsArray(Folder folder) {
  Set envSet = retrieveEnvironmentsForFolder(folder);
  environments = new ServerGroup[envSet.size()];
  envSet.toArray(environments);
  Arrays.sort(environments, new Comparator() {
      public int compare(Object obj1, Object obj2) {
        ServerGroup env1 = (ServerGroup) obj1;
        ServerGroup env2 = (ServerGroup) obj2;

return env1.getName().compareTo(env2.getName());
      }
    }
  );
}

ServerGroup[] environments = null;
if (folderName.equals("All")) {
  environments = ServerGroupFactory.getInstance().restoreAll();
}
else {
  Folder folder = resolveFolderFromName();
  
if (folder != null) {
    populateAndSortEnvironmentsArray(folder);
  }
}

Map endpointsToAgents = new HashMap();
ReportOutput output = new ReportOutput(metaData);

for (int i = 0; environments != null && i < environments.length; i++) {
  ServerGroup environment = environments[i];
  List relevantRoles = retrieveRelevantRoles(environment);

User[] users = Authority.getInstance().getUsersWithPermissionToPersistent(environment, "read");
  ServiceEndpoint[] endpoints = environment.getServerArray();
  for (int j = 0; j < endpoints.length; j++) {
    Agent agent = retrieveAgentForEndpoint(endpoints[j]);

for (int k = 0; k < users.length; k++) {
      User user = users[k];
      UserProfile profile = UserProfileFactory.getInstance().restoreForUser(user);
      String relevantRolesStr = "";

for (int l = 0; l < relevantRoles.size(); l++) {
        Role role = (Role) relevantRoles.get(l);
        if (user.hasRole(role)) {
          if (StringUtils.isNotEmpty(relevantRolesStr)) {
            relevantRolesStr += ", ";
          }
          relevantRolesStr += role.getName();
        }
      }
      
ReportRow row = null;
      if (StringUtils.isNotEmpty(relevantRolesStr)) {
        row = createReportRow(agent, environment, user, profile, relevantRolesStr);
      }
      else {
        row = createReportRow(agent, environment, user, profile, "Protected");
      }
      output.addRow(row);
    }
  }
}

return output;


Related Content

AnthillPro Template Reports
Report Templates