@POST
@Override
public RoleAndPrivilegeListResourceResponse post(Context context, Request request, Response response, Object payload)
throws ResourceException
{
RoleAndPrivilegeListResourceResponse result = new RoleAndPrivilegeListResourceResponse();
List<RoleAndPrivilegeListResource> resources = new ArrayList<RoleAndPrivilegeListResource>();
RoleAndPrivilegeListFilterResourceRequest filterRequest = (RoleAndPrivilegeListFilterResourceRequest) payload;
try {
Form form = request.getResourceRef().getQueryAsForm();
FilterRequest filter = new FilterRequest(filterRequest);
for (Role role : getSecuritySystem().getAuthorizationManager(DEFAULT_SOURCE).listRoles()) {
RoleAndPrivilegeListResource res = toDTO(role);
if (filter.applies(res)) {
resources.add(res);
}
}
for (Privilege privilege : getSecuritySystem().getAuthorizationManager(DEFAULT_SOURCE).listPrivileges()) {
RoleAndPrivilegeListResource res = toDTO(privilege);
if (filter.applies(res)) {
resources.add(res);
}
}
if (!StringUtils.isEmpty(filterRequest.getData().getUserId())) {
try {
User user = getSecuritySystem().getUser(filterRequest.getData().getUserId());
List<PlexusRoleResource> plexusRoles = securityToRestModel(user).getRoles();
for (PlexusRoleResource plexusRole : plexusRoles) {
if (!DEFAULT_SOURCE.equals(plexusRole.getSource())) {
RoleAndPrivilegeListResource res = toDTO(plexusRole);
if (filter.applies(res)) {
resources.add(res);
}
}
}
}
catch (UserNotFoundException e) {
getLogger().warn("Unable to load user, and retrieve any external roles assigned", e);
}
}
result.setTotalCount(resources.size());
result.setData(generateResultSet(resources, form));
}
catch (NoSuchAuthorizationManagerException e) {
this.getLogger().error("Unable to find AuthorizationManager 'default'", e);
throw new ResourceException(Status.SERVER_ERROR_INTERNAL, "Unable to find AuthorizationManager 'default'");
}