You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2015/12/22 03:05:22 UTC

incubator-ranger git commit: RANGER-789: fix policy-listing for non-admin users

Repository: incubator-ranger
Updated Branches:
  refs/heads/master fbf4f3533 -> d94aecff9


RANGER-789: fix policy-listing for non-admin users


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/d94aecff
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/d94aecff
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/d94aecff

Branch: refs/heads/master
Commit: d94aecff9374dfa4a93685c8d215b55af219b68d
Parents: fbf4f35
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Wed Dec 16 03:27:21 2015 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Mon Dec 21 17:58:30 2015 -0800

----------------------------------------------------------------------
 .../plugin/store/AbstractPredicateUtil.java     | 194 ++++++++++++++++++-
 .../org/apache/ranger/biz/ServiceDBStore.java   |  23 ++-
 .../apache/ranger/common/RangerSearchUtil.java  |   2 +-
 .../org/apache/ranger/rest/ServiceREST.java     | 176 +++++++++++------
 .../org/apache/ranger/rest/TestServiceREST.java |  10 +-
 5 files changed, 336 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d94aecff/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java
index abfb350..62b9bca 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java
@@ -79,16 +79,23 @@ public class AbstractPredicateUtil {
 	}
 
 	public void addPredicates(SearchFilter filter, List<Predicate> predicates) {
+		addPredicateForServiceType(filter.getParam(SearchFilter.SERVICE_TYPE), predicates);
 		addPredicateForServiceTypeId(filter.getParam(SearchFilter.SERVICE_TYPE_ID), predicates);
 		addPredicateForServiceName(filter.getParam(SearchFilter.SERVICE_NAME), predicates);
+		// addPredicateForServiceId(filter.getParam(SearchFilter.SERVICE_ID), predicates); // not supported
 		addPredicateForPolicyName(filter.getParam(SearchFilter.POLICY_NAME), predicates);
 		addPredicateForPolicyId(filter.getParam(SearchFilter.POLICY_ID), predicates);
 		addPredicateForIsEnabled(filter.getParam(SearchFilter.IS_ENABLED), predicates);
 		addPredicateForIsRecursive(filter.getParam(SearchFilter.IS_RECURSIVE), predicates);
+		addPredicateForTagServiceName(filter.getParam(SearchFilter.TAG_SERVICE_NAME), predicates);
+		// addPredicateForTagServiceId(filter.getParam(SearchFilter.TAG_SERVICE_ID), predicates); // not supported
 		addPredicateForUserName(filter.getParam(SearchFilter.USER), predicates);
 		addPredicateForGroupName(filter.getParam(SearchFilter.GROUP), predicates);
-		addPredicateForResourceSignature(filter.getParam(SearchFilter.RESOURCE_SIGNATURE), predicates);
 		addPredicateForResources(filter.getParamsWithPrefix(SearchFilter.RESOURCE_PREFIX, true), predicates);
+		addPredicateForPolicyResource(filter.getParam(SearchFilter.POL_RESOURCE), predicates);
+		addPredicateForPartialPolicyName(filter.getParam(SearchFilter.POLICY_NAME_PARTIAL), predicates);
+		addPredicateForResourceSignature(filter.getParam(SearchFilter.RESOURCE_SIGNATURE), predicates);
+		addPredicateForPolicyType(filter.getParam(SearchFilter.POLICY_TYPE), predicates);
 	}
 
 	public Comparator<RangerBaseModelObject> getSorter(SearchFilter filter) {
@@ -216,6 +223,40 @@ public class AbstractPredicateUtil {
 		sorterMap.put(SearchFilter.UPDATE_TIME, updateTimeComparator);
 	}
 
+	private Predicate addPredicateForServiceType(final String serviceType, List<Predicate> predicates) {
+		if(StringUtils.isEmpty(serviceType)) {
+			return null;
+		}
+
+		Predicate ret = new Predicate() {
+			@Override
+			public boolean evaluate(Object object) {
+				if(object == null) {
+					return false;
+				}
+
+				boolean ret = false;
+
+				if(object instanceof RangerServiceDef) {
+					RangerServiceDef serviceDef = (RangerServiceDef)object;
+					String           svcType    = serviceDef.getName();
+
+					ret = StringUtils.equals(svcType, serviceType);
+				} else {
+					ret = true;
+				}
+
+				return ret;
+			}
+		};
+
+		if(predicates != null) {
+			predicates.add(ret);
+		}
+
+		return ret;
+	}
+
 	private Predicate addPredicateForServiceTypeId(final String serviceTypeId, List<Predicate> predicates) {
 		if(StringUtils.isEmpty(serviceTypeId)) {
 			return null;
@@ -322,6 +363,39 @@ public class AbstractPredicateUtil {
 		return ret;
 	}
 
+	private Predicate addPredicateForPartialPolicyName(final String policyName, List<Predicate> predicates) {
+		if(StringUtils.isEmpty(policyName)) {
+			return null;
+		}
+
+		Predicate ret = new Predicate() {
+			@Override
+			public boolean evaluate(Object object) {
+				if(object == null) {
+					return false;
+				}
+
+				boolean ret = false;
+
+				if(object instanceof RangerPolicy) {
+					RangerPolicy policy = (RangerPolicy)object;
+
+					ret = StringUtils.containsIgnoreCase(policy.getName(), policyName);
+				} else {
+					ret = true;
+				}
+
+				return ret;
+			}
+		};
+
+		if(predicates != null) {
+			predicates.add(ret);
+		}
+
+		return ret;
+	}
+
 	private Predicate addPredicateForPolicyId(final String policyId, List<Predicate> predicates) {
 		if(StringUtils.isEmpty(policyId)) {
 			return null;
@@ -557,6 +631,58 @@ public class AbstractPredicateUtil {
 		return ret;
 	}
 
+	private Predicate addPredicateForPolicyResource(final String resourceValue, List<Predicate> predicates) {
+		if(StringUtils.isEmpty(resourceValue)) {
+			return null;
+		}
+
+		Predicate ret = new Predicate() {
+			@Override
+			public boolean evaluate(Object object) {
+				if(object == null) {
+					return false;
+				}
+
+				boolean ret = false;
+
+				if(object instanceof RangerPolicy) {
+					RangerPolicy                      policy          = (RangerPolicy)object;
+					Map<String, RangerPolicyResource> policyResources = policy.getResources();
+
+					if(MapUtils.isNotEmpty(policyResources)) {
+						for(String resourceName : policyResources.keySet()) {
+							RangerPolicyResource policyResource = policyResources.get(resourceName);
+
+							if(policyResource != null && CollectionUtils.isNotEmpty(policyResource.getValues())) {
+								for(String policyResourceVal : policyResource.getValues()) {
+									if(StringUtils.containsIgnoreCase(policyResourceVal, resourceValue)) {
+										ret = true;
+
+										break;
+									}
+								}
+							}
+
+							if(ret) {
+								break;
+							}
+						}
+					}
+				} else {
+					ret = true;
+				}
+
+				return ret;
+			}
+		};
+
+		if(predicates != null) {
+			predicates.add(ret);
+		}
+
+		return ret;
+	}
+
 	private Predicate addPredicateForIsRecursive(final String isRecursiveStr, List<Predicate> predicates) {
 		if(StringUtils.isEmpty(isRecursiveStr)) {
 			return null;
@@ -604,6 +730,39 @@ public class AbstractPredicateUtil {
 		return ret;
 	}
 
+	private Predicate addPredicateForTagServiceName(final String tagServiceName, List<Predicate> predicates) {
+		if(StringUtils.isEmpty(tagServiceName)) {
+			return null;
+		}
+
+		Predicate ret = new Predicate() {
+			@Override
+			public boolean evaluate(Object object) {
+				if(object == null) {
+					return false;
+				}
+
+				boolean ret = false;
+
+				if(object instanceof RangerService) {
+					RangerService service = (RangerService)object;
+
+					ret = StringUtils.equals(tagServiceName, service.getTagService());
+				} else {
+					ret = true;
+				}
+
+				return ret;
+			}
+		};
+
+		if(ret != null) {
+			predicates.add(ret);
+		}
+
+		return ret;
+	}
+
 	private Predicate addPredicateForResourceSignature(String signature, List<Predicate> predicates) {
 
 		Predicate ret = createPredicateForResourceSignature(signature);
@@ -614,6 +773,39 @@ public class AbstractPredicateUtil {
 
 		return ret;
 	}
+
+	private Predicate addPredicateForPolicyType(final String policyType, List<Predicate> predicates) {
+		if(StringUtils.isEmpty(policyType)) {
+			return null;
+		}
+
+		Predicate ret = new Predicate() {
+			@Override
+			public boolean evaluate(Object object) {
+				if(object == null) {
+					return false;
+				}
+
+				boolean ret = true;
+
+				if(object instanceof RangerPolicy) {
+					RangerPolicy policy = (RangerPolicy)object;
+
+					if(policy.getPolicyType() != null) {
+						ret = StringUtils.equalsIgnoreCase(policyType, policy.getPolicyType().toString());
+					}
+				}
+
+				return ret;
+			}
+		};
+
+		if(predicates != null) {
+			predicates.add(ret);
+		}
+
+		return ret;
+	}
 	
 	/**
 	 * @param policySignature

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d94aecff/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 80d8dd3..38091bd 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -1641,7 +1641,13 @@ public class ServiceDBStore extends AbstractServiceStore {
 			throw new Exception("service does not exist - id='" + serviceId);
 		}
 
-		List<RangerPolicy> ret = getServicePolicies(service.getName(), filter);
+		RangerPolicyRetriever policyRetriever = new RangerPolicyRetriever(daoMgr);
+
+		List<RangerPolicy> ret = policyRetriever.getServicePolicies(service);
+
+		if(filter != null) {
+			predicateUtil.applyFilter(ret, filter);
+		}
 
 		return ret;
 	}
@@ -1658,7 +1664,6 @@ public class ServiceDBStore extends AbstractServiceStore {
 			throw new Exception("service does not exist - id='" + serviceId);
 		}
 
-
 		PList<RangerPolicy> ret = getPaginatedServicePolicies(service.getName(), filter);
 
 		return ret;
@@ -1670,13 +1675,19 @@ public class ServiceDBStore extends AbstractServiceStore {
 			LOG.debug("==> ServiceDBStore.getServicePolicies(" + serviceName + ")");
 		}
 
-		if(filter == null) {
-			filter = new SearchFilter();
+		XXService service = daoMgr.getXXService().findByName(serviceName);
+
+		if (service == null) {
+			throw new Exception("service does not exist - name='" + serviceName);
 		}
 
-		filter.setParam(SearchFilter.SERVICE_NAME, serviceName);
+		RangerPolicyRetriever policyRetriever = new RangerPolicyRetriever(daoMgr);
 
-		List<RangerPolicy> ret = getPolicies(filter);
+		List<RangerPolicy> ret = policyRetriever.getServicePolicies(service);
+
+		if(filter != null) {
+			predicateUtil.applyFilter(ret, filter);
+		}
 
 		if(LOG.isDebugEnabled()) {
 			LOG.debug("<== ServiceDBStore.getServicePolicies(" + serviceName + "): count=" + ((ret == null) ? 0 : ret.size()));

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d94aecff/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
index 141e634..cf66fc1 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
@@ -159,7 +159,7 @@ public class RangerSearchUtil extends SearchUtil {
 		int pageSize = restErrorUtil.parseInt(request.getParameter(SearchFilter.PAGE_SIZE),
 				configUtil.getDefaultMaxRows(), "Invalid value for parameter pageSize",
 				MessageEnums.INVALID_INPUT_DATA, null, SearchFilter.PAGE_SIZE);
-		ret.setMaxRows(pageSize);
+		ret.setMaxRows(validatePageSize(pageSize));
 
 		ret.setGetCount(restErrorUtil.parseBoolean(request.getParameter("getCount"), true));
 		String sortBy = restErrorUtil.validateString(request.getParameter(SearchFilter.SORT_BY),

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d94aecff/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index 7d41f07..3c00e63 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -40,6 +40,7 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -1256,32 +1257,42 @@ public class ServiceREST {
 			LOG.debug("==> ServiceREST.getPolicies()");
 		}
 
-		RangerPolicyList ret  = null;
+		RangerPolicyList ret  = new RangerPolicyList();
 		RangerPerfTracer perf = null;
 
-		PList<RangerPolicy> paginatedPolicies = null;
-
 		SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
 
 		try {
 			if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
 				perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "ServiceREST.getPolicies()");
 			}
-			paginatedPolicies = svcStore.getPaginatedPolicies(filter);
 
-			if(paginatedPolicies != null) {
-				ret = new RangerPolicyList();
+			if(isAdminUserWithNoFilterParams(filter)) {
+				PList<RangerPolicy> policies = svcStore.getPaginatedPolicies(filter);
+
+				ret = toRangerPolicyList(policies);
+			} else {
+				// get all policies from the store; pick the page to return after applying filter
+				int savedStartIndex = filter == null ? 0 : filter.getStartIndex();
+				int savedMaxRows    = filter == null ? Integer.MAX_VALUE : filter.getMaxRows();
 
-				ret.setPolicies(paginatedPolicies.getList());
-				ret.setPageSize(paginatedPolicies.getPageSize());
-				ret.setResultSize(paginatedPolicies.getResultSize());
-				ret.setStartIndex(paginatedPolicies.getStartIndex());
-				ret.setTotalCount(paginatedPolicies.getTotalCount());
-				ret.setSortBy(paginatedPolicies.getSortBy());
-				ret.setSortType(paginatedPolicies.getSortType());
+				if(filter != null) {
+					filter.setStartIndex(0);
+					filter.setMaxRows(Integer.MAX_VALUE);
+				}
+
+				List<RangerPolicy> policies = svcStore.getPolicies(filter);
+
+				if(filter != null) {
+					filter.setStartIndex(savedStartIndex);
+					filter.setMaxRows(savedMaxRows);
+				}
 
-				applyAdminAccessFilter(ret);
+				applyAdminAccessFilter(policies);
+
+				ret = toRangerPolicyList(policies, filter);
 			}
+
 		} catch(WebApplicationException excp) {
 			throw excp;
 		} catch (Throwable excp) {
@@ -1376,31 +1387,40 @@ public class ServiceREST {
 			LOG.debug("==> ServiceREST.getServicePolicies(" + serviceId + ")");
 		}
 
-		RangerPolicyList ret  = null;
+		RangerPolicyList ret  = new RangerPolicyList();
 		RangerPerfTracer perf = null;
 
-		PList<RangerPolicy> paginatedPolicies = null;
-
 		SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
 
 		try {
 			if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
 				perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "ServiceREST.getServicePolicies(serviceId=" + serviceId + ")");
 			}
-			paginatedPolicies = svcStore.getPaginatedServicePolicies(serviceId, filter);
 
-			if(paginatedPolicies != null) {
-				ret = new RangerPolicyList();
+			if(isAdminUserWithNoFilterParams(filter)) {
+				PList<RangerPolicy> policies = svcStore.getPaginatedServicePolicies(serviceId, filter);
 
-				ret.setPolicies(paginatedPolicies.getList());
-				ret.setPageSize(paginatedPolicies.getPageSize());
-				ret.setResultSize(paginatedPolicies.getResultSize());
-				ret.setStartIndex(paginatedPolicies.getStartIndex());
-				ret.setTotalCount(paginatedPolicies.getTotalCount());
-				ret.setSortBy(paginatedPolicies.getSortBy());
-				ret.setSortType(paginatedPolicies.getSortType());
+				ret = toRangerPolicyList(policies);
+			} else {
+				// get all policies from the store; pick the page to return after applying filter
+				int savedStartIndex = filter == null ? 0 : filter.getStartIndex();
+				int savedMaxRows    = filter == null ? Integer.MAX_VALUE : filter.getMaxRows();
+
+				if(filter != null) {
+					filter.setStartIndex(0);
+					filter.setMaxRows(Integer.MAX_VALUE);
+				}
 
-				applyAdminAccessFilter(ret);
+				List<RangerPolicy> servicePolicies = svcStore.getServicePolicies(serviceId, filter);
+
+				if(filter != null) {
+					filter.setStartIndex(savedStartIndex);
+					filter.setMaxRows(savedMaxRows);
+				}
+
+				applyAdminAccessFilter(servicePolicies);
+
+				ret = toRangerPolicyList(servicePolicies, filter);
 			}
 		} catch(WebApplicationException excp) {
 			throw excp;
@@ -1412,10 +1432,6 @@ public class ServiceREST {
 			RangerPerfTracer.log(perf);
 		}
 
-		if (ret == null) {
-			LOG.info("No Policies found for given service id: " + serviceId);
-		}
-
 		if (LOG.isDebugEnabled()) {
 			LOG.debug("<== ServiceREST.getServicePolicies(" + serviceId + "): count="
 					+ (ret == null ? 0 : ret.getListSize()));
@@ -1432,31 +1448,40 @@ public class ServiceREST {
 			LOG.debug("==> ServiceREST.getServicePolicies(" + serviceName + ")");
 		}
 
-		RangerPolicyList ret  = null;
+		RangerPolicyList ret  = new RangerPolicyList();
 		RangerPerfTracer perf = null;
 
-		PList<RangerPolicy> paginatedPolicies = null;
-
 		SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
 
 		try {
 			if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
 				perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "ServiceREST.getServicePolicies(serviceName=" + serviceName + ")");
 			}
-			paginatedPolicies = svcStore.getPaginatedServicePolicies(serviceName, filter);
 
-			if(paginatedPolicies != null) {
-				ret = new RangerPolicyList();
+			if(isAdminUserWithNoFilterParams(filter)) {
+				PList<RangerPolicy> policies = svcStore.getPaginatedServicePolicies(serviceName, filter);
+
+				ret = toRangerPolicyList(policies);
+			} else {
+				// get all policies from the store; pick the page to return after applying filter
+				int savedStartIndex = filter == null ? 0 : filter.getStartIndex();
+				int savedMaxRows    = filter == null ? Integer.MAX_VALUE : filter.getMaxRows();
+
+				if(filter != null) {
+					filter.setStartIndex(0);
+					filter.setMaxRows(Integer.MAX_VALUE);
+				}
 
-				ret.setPolicies(paginatedPolicies.getList());
-				ret.setPageSize(paginatedPolicies.getPageSize());
-				ret.setResultSize(paginatedPolicies.getResultSize());
-				ret.setStartIndex(paginatedPolicies.getStartIndex());
-				ret.setTotalCount(paginatedPolicies.getTotalCount());
-				ret.setSortBy(paginatedPolicies.getSortBy());
-				ret.setSortType(paginatedPolicies.getSortType());
+				List<RangerPolicy> servicePolicies = svcStore.getServicePolicies(serviceName, filter);
 
-				applyAdminAccessFilter(ret);
+				if(filter != null) {
+					filter.setStartIndex(savedStartIndex);
+					filter.setMaxRows(savedMaxRows);
+				}
+
+				applyAdminAccessFilter(servicePolicies);
+
+				ret = toRangerPolicyList(servicePolicies, filter);
 			}
 		} catch(WebApplicationException excp) {
 			throw excp;
@@ -1468,10 +1493,6 @@ public class ServiceREST {
 			RangerPerfTracer.log(perf);
 		}
 
-		if (ret == null) {
-			LOG.info("No Policies found for given service name: " + serviceName);
-		}
-
 		if (LOG.isDebugEnabled()) {
 			LOG.debug("<== ServiceREST.getServicePolicies(" + serviceName + "): count="
 					+ (ret == null ? 0 : ret.getListSize()));
@@ -1773,12 +1794,6 @@ public class ServiceREST {
 		return svcStore.getPolicyForVersionNumber(policyId, versionNo);
 	}
 
-	private void applyAdminAccessFilter(RangerPolicyList policies) {
-		if(policies != null && !CollectionUtils.isEmpty(policies.getList())) {
-			applyAdminAccessFilter(policies.getPolicies());
-		}
-	}
-
 	private void applyAdminAccessFilter(List<RangerPolicy> policies) {
 		boolean isAdmin = bizUtil.isAdmin();
 		boolean isKeyAdmin = bizUtil.isKeyAdmin();
@@ -1912,4 +1927,53 @@ public class ServiceREST {
 		return String.valueOf(bizUtil.isSSOEnabled());
 	}
 
+	boolean isAdminUserWithNoFilterParams(SearchFilter filter) {
+		return (filter == null || MapUtils.isEmpty(filter.getParams())) &&
+			   (bizUtil.isAdmin() || bizUtil.isKeyAdmin());
+	}
+
+	private RangerPolicyList toRangerPolicyList(PList<RangerPolicy> policyList) {
+		RangerPolicyList ret = new RangerPolicyList();
+
+		if(policyList != null) {
+			ret.setPolicies(policyList.getList());
+			ret.setPageSize(policyList.getPageSize());
+			ret.setResultSize(policyList.getResultSize());
+			ret.setStartIndex(policyList.getStartIndex());
+			ret.setTotalCount(policyList.getTotalCount());
+			ret.setSortBy(policyList.getSortBy());
+			ret.setSortType(policyList.getSortType());
+		}
+
+		return ret;
+	}
+
+	private RangerPolicyList toRangerPolicyList(List<RangerPolicy> policyList, SearchFilter filter) {
+		RangerPolicyList ret = new RangerPolicyList();
+
+		if(CollectionUtils.isNotEmpty(policyList)) {
+			int    totalCount = policyList.size();
+			int    startIndex = filter == null ? 0 : filter.getStartIndex();
+			int    pageSize   = filter == null ? totalCount : filter.getMaxRows();
+			int    toIndex    = Math.min(startIndex + pageSize, totalCount);
+			String sortType   = filter == null ? null : filter.getSortType();
+			String sortBy     = filter == null ? null : filter.getSortBy();
+
+			List<RangerPolicy> retList = new ArrayList<RangerPolicy>();
+			for(int i = startIndex; i < toIndex; i++) {
+				retList.add(policyList.get(i));
+			}
+
+			ret.setPolicies(retList);
+			ret.setPageSize(pageSize);
+			ret.setResultSize(retList.size());
+			ret.setStartIndex(startIndex);
+			ret.setTotalCount(totalCount);
+			ret.setSortBy(sortBy);
+			ret.setSortType(sortType);
+		}
+
+		return ret;
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d94aecff/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
----------------------------------------------------------------------
diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
index 339f1e7..d7af3c2 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
@@ -880,7 +880,8 @@ public class TestServiceREST {
 				searchUtil.getSearchFilter(request, policyService.sortFields))
 				.thenReturn(filter);
 		RangerPolicyList dbRangerPolicy = serviceREST.getPolicies(request);
-		Assert.assertNull(dbRangerPolicy);
+		Assert.assertNotNull(dbRangerPolicy);
+		Assert.assertEquals(dbRangerPolicy.getListSize(), 0);
 		Mockito.verify(searchUtil).getSearchFilter(request,
 				policyService.sortFields);
 	}
@@ -903,7 +904,6 @@ public class TestServiceREST {
 		Assert.assertNotNull(data);
 		Mockito.verify(searchUtil).getSearchFilter(request,
 				policyService.sortFields);
-		Mockito.verify(svcStore).getPaginatedPolicies(filter);
 	}
 
 	@Test
@@ -927,7 +927,7 @@ public class TestServiceREST {
 		Assert.assertNotNull(dbRangerPolicy);
 		Mockito.verify(searchUtil).getSearchFilter(request,
 				policyService.sortFields);
-		Mockito.verify(svcStore).getPaginatedServicePolicies(Id, filter);
+		Mockito.verify(svcStore).getServicePolicies(Id, filter);
 	}
 
 	@Test
@@ -935,7 +935,7 @@ public class TestServiceREST {
 		HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 		RangerPolicy rangerPolicy = rangerPolicy();
 
-		PList<RangerPolicy> ret  = Mockito.mock(PList.class);
+		List<RangerPolicy> ret  = Mockito.mock(List.class);
 		SearchFilter filter = new SearchFilter();
 		filter.setParam(SearchFilter.POLICY_NAME, "policyName");
 		filter.setParam(SearchFilter.SERVICE_NAME, "serviceName");
@@ -944,7 +944,7 @@ public class TestServiceREST {
 				.thenReturn(filter);
 
 		Mockito.when(
-				svcStore.getPaginatedServicePolicies(rangerPolicy.getName(),
+				svcStore.getServicePolicies(rangerPolicy.getName(),
 						filter)).thenReturn(ret);
 
 		RangerPolicyList dbRangerPolicy = serviceREST.getServicePoliciesByName(