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

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

commit 412e910638a38f76e48d8a46711b5875644c90b5
Author: Pradeep Agrawal <[email protected]>
AuthorDate: Tue Aug 11 15:55:11 2026 +0530

    RANGER-5421: Align authorization and service detail handling for repository 
search APIs
---
 .../java/org/apache/ranger/rest/PublicAPIs.java     | 21 ++++++++++++++++++---
 .../java/org/apache/ranger/rest/ServiceREST.java    | 13 +++++++++++++
 .../java/org/apache/ranger/rest/TestPublicAPIs.java | 16 ++++++++--------
 3 files changed, 39 insertions(+), 11 deletions(-)

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 5d11e97a4..7d06babe0 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
@@ -32,6 +32,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.VXAsset;
@@ -62,6 +63,7 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Path("public")
@@ -175,18 +177,31 @@ public void deleteRepository(@PathParam("id") Long id, 
@Context HttpServletReque
     @GET
     @Path("/api/repository/")
     @Produces("application/json")
+    @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + 
RangerAPIList.SEARCH_X_ASSETS + "\")")
     public VXRepositoryList searchRepositories(@Context HttpServletRequest 
request) {
         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<>();
+            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());
         }
 
-        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 94efefa3d..371dfa0ee 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
@@ -992,6 +992,19 @@ public List<RangerService> getServices(SearchFilter 
filter) {
             }
 
             ret = svcStore.getServices(filter);
+
+            if (ret != null) {
+                UserSessionBase userSession = 
ContextUtil.getCurrentUserSession();
+                if (userSession != null && 
userSession.isSingleRoleUserSession()) {
+                    List<RangerService> updateServiceList = new ArrayList<>();
+                    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 d79e38dfb..6e0c20ba5 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
@@ -180,21 +180,21 @@ public void test4deleteRepository() {
     @Test
     public void test5searchRepositories() {
         HttpServletRequest  request       = 
Mockito.mock(HttpServletRequest.class);
-        List<RangerService> ret           = new ArrayList<>();
+        List<RangerService> services      = new ArrayList<>();
         RangerService       rangerService = rangerService();
         VXRepository        vXRepository  = vXRepository(rangerService);
-        List<VXRepository>  repoList      = new ArrayList<>();
-        repoList.add(vXRepository);
-        VXRepositoryList vXRepositoryList = new VXRepositoryList(repoList);
-        SearchFilter     filter           = new SearchFilter();
+        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);
         Assertions.assertNotNull(dbVXRepositoryList);
-        Assertions.assertEquals(dbVXRepositoryList.getResultSize(), 
vXRepositoryList.getResultSize());
+        Assertions.assertEquals(1, dbVXRepositoryList.getResultSize());
+        Assertions.assertEquals(vXRepository, 
dbVXRepositoryList.getVXRepositories().get(0));
+        Mockito.verify(serviceUtil).toVXRepository(rangerService);
     }
 
     @Test

Reply via email to