From 992379c7025337e22bf3ad94e864cfa7e02b6bdf Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Sat, 26 May 2012 14:15:04 +1000 Subject: [PATCH] filtering permissions/roles - working - but rethinking filters just a little bit - not much! --- .../java/org/mifosng/data/PermissionData.java | 2 + .../main/java/org/mifosng/data/RoleData.java | 2 + .../platform/api/PermissionApiResource.java | 23 +++---- .../mifosng/platform/api/RoleApiResource.java | 6 +- .../ApiJSONFormattingServiceImpl.java | 61 ++++++++++++++----- 5 files changed, 65 insertions(+), 29 deletions(-) diff --git a/mifosng-data/src/main/java/org/mifosng/data/PermissionData.java b/mifosng-data/src/main/java/org/mifosng/data/PermissionData.java index f01cf172c..47ef8ebeb 100644 --- a/mifosng-data/src/main/java/org/mifosng/data/PermissionData.java +++ b/mifosng-data/src/main/java/org/mifosng/data/PermissionData.java @@ -4,9 +4,11 @@ import java.io.Serializable; import javax.xml.bind.annotation.XmlRootElement; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; import org.codehaus.jackson.map.annotate.JsonFilter; @XmlRootElement(name = "permission") +@JsonIgnoreProperties({ "orgId" }) @JsonFilter("permissionFilter") public class PermissionData implements Serializable { diff --git a/mifosng-data/src/main/java/org/mifosng/data/RoleData.java b/mifosng-data/src/main/java/org/mifosng/data/RoleData.java index 2438bfc43..2f8f2f723 100644 --- a/mifosng-data/src/main/java/org/mifosng/data/RoleData.java +++ b/mifosng-data/src/main/java/org/mifosng/data/RoleData.java @@ -5,9 +5,11 @@ import java.util.Collection; import javax.xml.bind.annotation.XmlRootElement; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; import org.codehaus.jackson.map.annotate.JsonFilter; @XmlRootElement(name = "role") +@JsonIgnoreProperties({ "orgId" }) @JsonFilter("roleFilter") public class RoleData { diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/PermissionApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/PermissionApiResource.java index d759b65dd..b5cf362f4 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/PermissionApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/PermissionApiResource.java @@ -24,22 +24,23 @@ public class PermissionApiResource { private String allowedFieldList = ""; private String filterName = "permissionFilter"; - @Autowired - private PermissionReadPlatformService permissionReadPlatformService; + @Autowired + private PermissionReadPlatformService permissionReadPlatformService; @Autowired private ApiJSONFormattingService jsonFormattingService; - + @GET - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Produces({MediaType.APPLICATION_JSON}) + @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Produces({ MediaType.APPLICATION_JSON }) public String retrieveAllPermissions(@Context UriInfo uriInfo) { - Collection permissions = this.permissionReadPlatformService.retrieveAllPermissions(); - - //TODO - setting selectedFields just to not show org_id, can be set be to "" after org_id is removed - String selectedFields = "id,name,description,code,groupType"; - return this.jsonFormattingService.convertRequest(permissions, filterName, - allowedFieldList, selectedFields, uriInfo.getQueryParameters()); + Collection permissions = this.permissionReadPlatformService + .retrieveAllPermissions(); + + String selectedFields = ""; + return this.jsonFormattingService.convertRequest(permissions, + filterName, allowedFieldList, selectedFields, + uriInfo.getQueryParameters()); } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/RoleApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/RoleApiResource.java index 9e987c154..bf1c18a84 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/RoleApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/RoleApiResource.java @@ -72,7 +72,7 @@ public class RoleApiResource { RoleData role = new RoleData(); role.setAvailablePermissions(allPermissions); - String selectedFields = "allowedFieldList"; + String selectedFields = allowedFieldList; return this.jsonFormattingService.convertRequest(role, filterName, allowedFieldList, selectedFields, uriInfo.getQueryParameters()); } @@ -102,9 +102,7 @@ public class RoleApiResource { role.setAvailablePermissions(availablePermissions); } - // TODO - setting selectedFields just to not show org_id, can be set be - // to "" after org_id is removed - String selectedFields = "id,name,description,selectedPermissions"; + String selectedFields = ""; return this.jsonFormattingService.convertRequest(role, filterName, allowedFieldList, selectedFields, uriInfo.getQueryParameters()); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java index 3fd01001d..715aecdab 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java @@ -14,7 +14,6 @@ import org.codehaus.jackson.map.ObjectWriter; import org.codehaus.jackson.map.ser.FilterProvider; import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter; import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider; -import org.mifosng.platform.api.ReportingApiResource; import org.mifosng.platform.exceptions.PlatformInternalServerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,8 +22,9 @@ import org.springframework.stereotype.Service; @Service public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { - private final static Logger logger = LoggerFactory.getLogger(ApiJSONFormattingServiceImpl.class); - + private final static Logger logger = LoggerFactory + .getLogger(ApiJSONFormattingServiceImpl.class); + @Override public String convertRequest(Object dataObject, String filterName, String allowedFieldList, String selectedFields, @@ -47,7 +47,7 @@ public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { paramFieldsSet.add(st.nextToken().trim()); } Set selectedFieldsSet = new HashSet(); - st = new StringTokenizer(fields, ","); + st = new StringTokenizer(selectedFields, ","); while (st.hasMoreTokens()) { selectedFieldsSet.add(st.nextToken().trim()); } @@ -63,8 +63,6 @@ public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { } } } - logger.info("passed fields and is selected fields - Fieldlist: " + fieldList); - } } else { fieldList = selectedFields; @@ -98,17 +96,52 @@ public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { filterFields.add(st.nextToken().trim()); } - if (filterType.equals("I")) { - filters = new SimpleFilterProvider().addFilter(filterName, - SimpleBeanPropertyFilter - .filterOutAllExcept(filterFields)); + if (filterName.equals("roleFilter")) { + + Set permissionFields = new HashSet(); + //Ask keith which ones to show + permissionFields.add("id"); + permissionFields.add("name"); + permissionFields.add("description"); + permissionFields.add("code"); + permissionFields.add("groupType"); + + if (filterType.equals("I")) { + filters = new SimpleFilterProvider() + .addFilter( + filterName, + SimpleBeanPropertyFilter + .filterOutAllExcept(filterFields)) + .addFilter( + "permissionFilter", + SimpleBeanPropertyFilter + .filterOutAllExcept(permissionFields)); + + } else { + filters = new SimpleFilterProvider() + .addFilter( + filterName, + SimpleBeanPropertyFilter + .serializeAllExcept(filterFields)) + .addFilter( + "permissionFilter", + SimpleBeanPropertyFilter + .filterOutAllExcept(permissionFields)); + } } else { - filters = new SimpleFilterProvider().addFilter(filterName, - SimpleBeanPropertyFilter - .serializeAllExcept(filterFields)); - } + if (filterType.equals("I")) { + filters = new SimpleFilterProvider().addFilter(filterName, + SimpleBeanPropertyFilter + .filterOutAllExcept(filterFields)); + + } else { + filters = new SimpleFilterProvider().addFilter(filterName, + SimpleBeanPropertyFilter + .serializeAllExcept(filterFields)); + } + } ObjectWriter jsonWriter = null; if (prettyOutput) { jsonWriter = new ObjectMapper()