You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by pr...@apache.org on 2026/08/18 11:35:27 UTC

(ranger) branch ranger-2.9 updated: RANGER-5421: Align authorization and service detail handling for repository search APIs (#1145) (#1164)

This is an automated email from the ASF dual-hosted git repository.

pradeepagrawal8184 pushed a commit to branch ranger-2.9
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/ranger-2.9 by this push:
     new 88af6e446 RANGER-5421: Align authorization and service detail handling for repository search APIs (#1145) (#1164)
88af6e446 is described below

commit 88af6e446f54dd9c56bf7ee3d9d9f4010a4ef455
Author: PradeeP AgrawaL <pr...@apache.org>
AuthorDate: Tue Aug 18 17:05:21 2026 +0530

    RANGER-5421: Align authorization and service detail handling for repository search APIs (#1145) (#1164)
    
    (cherry picked from commit 30252c32edddda7b3cdfb7123c9c2bd7b092c593)
---
 .../java/org/apache/ranger/common/ServiceUtil.java | 17 -----------------
 .../java/org/apache/ranger/rest/PublicAPIs.java    | 22 ++++++++++++++++++----
 .../java/org/apache/ranger/rest/ServiceREST.java   | 13 +++++++++++++
 .../org/apache/ranger/rest/TestPublicAPIs.java     | 14 +++++++-------
 4 files changed, 38 insertions(+), 28 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java b/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java
index f165ee54b..0633c945c 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java
@@ -59,7 +59,6 @@
 import org.apache.ranger.view.VXPolicy;
 import org.apache.ranger.view.VXPolicyList;
 import org.apache.ranger.view.VXRepository;
-import org.apache.ranger.view.VXRepositoryList;
 import org.apache.ranger.view.VXResource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -754,22 +753,6 @@ public SearchCriteria getMappedSearchParams(HttpServletRequest request,
 		return searchCriteria;
 	}
 	
-	
-	public VXRepositoryList rangerServiceListToPublicObjectList(List<RangerService> serviceList) {
-
-		List<VXRepository> repoList = new ArrayList<VXRepository>();
-		for (RangerService service  : serviceList) {
-			VXRepository vXRepo = toVXRepository(service);
-
-			if(vXRepo != null) {
-				repoList.add(vXRepo);
-			}
-		}
-		VXRepositoryList vXRepositoryList = new VXRepositoryList(repoList);
-		return vXRepositoryList;
-	}
-	
-		
 	private VXDataObject vXDataObjectToPublicDataObject(VXDataObject publicDataObject, VXDataObject vXdataObject) {
 		
 		VXDataObject ret = publicDataObject;
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java
index b7735e715..aea13c13f 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java
@@ -28,6 +28,7 @@
 import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerService;
 import org.apache.ranger.plugin.util.SearchFilter;
+import org.apache.ranger.security.context.RangerAPIList;
 import org.apache.ranger.service.RangerPolicyService;
 import org.apache.ranger.service.XAssetService;
 import org.apache.ranger.view.*;
@@ -45,6 +46,7 @@
 import javax.ws.rs.*;
 import javax.ws.rs.core.Context;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Path("public")
@@ -186,6 +188,7 @@ public void deleteRepository(@PathParam("id") Long id,
 	@GET
 	@Path("/api/repository/")
 	@Produces({ "application/json" })
+	@PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.SEARCH_X_ASSETS + "\")")
 	public VXRepositoryList searchRepositories(
 			@Context HttpServletRequest request) {
 	
@@ -193,18 +196,29 @@ public VXRepositoryList searchRepositories(
 			logger.debug("==> PublicAPIs.searchRepositories()");
 		}
 
+		VXRepositoryList ret = new VXRepositoryList();
+
 		SearchFilter filter = searchUtil.getSearchFilterFromLegacyRequestForRepositorySearch(request, xAssetService.sortFields);
 
 		List<RangerService> serviceList = serviceREST.getServices(filter);
 
-		VXRepositoryList ret = null;
-
 		if (serviceList != null) {
-			ret = serviceUtil.rangerServiceListToPublicObjectList(serviceList);
+			List<VXRepository> repositories = new ArrayList<>(serviceList.size());
+			for (RangerService service : serviceList) {
+				VXRepository repository = serviceUtil.toVXRepository(service);
+
+				if (repository != null) {
+					repositories.add(repository);
+				}
+			}
+
+			ret.setVXRepositories(repositories);
+			ret.setTotalCount(repositories.size());
+			ret.setResultSize(repositories.size());
 		}
 
 		if(logger.isDebugEnabled()) {
-			logger.debug("<== PublicAPIs.searchRepositories(): count=" + (ret == null ? 0 : ret.getListSize()));
+			logger.debug("<== PublicAPIs.searchRepositories(): count=" + ret.getListSize());
 		}
 
 		return ret;
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 4c5bd7e28..c6c53c502 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
@@ -1051,6 +1051,19 @@ public List<RangerService> getServices(SearchFilter filter) {
 				perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "ServiceREST.getServices()");
 			}
 			ret = svcStore.getServices(filter);
+
+			if (ret != null) {
+				UserSessionBase userSession = ContextUtil.getCurrentUserSession();
+				if (userSession != null && userSession.isSingleRoleUserSession()) {
+					List<RangerService> updateServiceList = new ArrayList<RangerService>();
+					for (RangerService rangerService : ret) {
+						if (rangerService != null) {
+							updateServiceList.add(hideCriticalServiceDetailsForRoleUser(rangerService));
+						}
+					}
+					ret = updateServiceList;
+				}
+			}
 		} catch(WebApplicationException excp) {
 			throw excp;
 		} catch(Throwable excp) {
diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java b/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java
index 22eb46958..19abca6d6 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java
@@ -334,21 +334,21 @@ public void test4deleteRepository() throws Exception {
 	@Test
 	public void test5searchRepositories() throws Exception {
 		HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
-		List<RangerService> ret = new ArrayList<RangerService>();
+		List<RangerService> services = new ArrayList<RangerService>();
 		RangerService rangerService = rangerService();
 		VXRepository vXRepository = vXRepository(rangerService);
-		List<VXRepository> repoList = new ArrayList<VXRepository>();
-		repoList.add(vXRepository);
-		VXRepositoryList vXRepositoryList = new VXRepositoryList(repoList);
+		services.add(rangerService);
 		SearchFilter filter = new SearchFilter();
 		filter.setParam(SearchFilter.POLICY_NAME, "policyName");
 		filter.setParam(SearchFilter.SERVICE_NAME, "serviceName");
 		Mockito.when(searchUtil.getSearchFilterFromLegacyRequestForRepositorySearch(request, xAssetService.sortFields)).thenReturn(filter);
-		Mockito.when(serviceREST.getServices(filter)).thenReturn(ret);
-		Mockito.when(serviceUtil.rangerServiceListToPublicObjectList(ret)).thenReturn(vXRepositoryList);
+		Mockito.when(serviceREST.getServices(filter)).thenReturn(services);
+		Mockito.when(serviceUtil.toVXRepository(rangerService)).thenReturn(vXRepository);
 		VXRepositoryList dbVXRepositoryList = publicAPIs.searchRepositories(request);
 		Assert.assertNotNull(dbVXRepositoryList);
-		Assert.assertEquals(dbVXRepositoryList.getResultSize(), vXRepositoryList.getResultSize());
+		Assert.assertEquals(1, dbVXRepositoryList.getResultSize());
+		Assert.assertEquals(vXRepository, dbVXRepositoryList.getVXRepositories().get(0));
+		Mockito.verify(serviceUtil).toVXRepository(rangerService);
 	}
 	
 	@Test