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