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

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


The following commit(s) were added to refs/heads/ranger-2.8 by this push:
     new ee575c4bc RANGER-4771: Remove the calls to ensureAdminAccess() in 
grantAccess() and revokeAccess()
ee575c4bc is described below

commit ee575c4bce0fa5e32e4ce324edc8cf121aee1897
Author: sanket-shelar <[email protected]>
AuthorDate: Thu Oct 16 21:08:03 2025 +0530

    RANGER-4771: Remove the calls to ensureAdminAccess() in grantAccess() and 
revokeAccess()
    
    Signed-off-by: Kishor Gollapalliwar <[email protected]>
    (cherry picked from commit c731ac3a53f957bbd117c3d38b12c5b34c18d8ce)
---
 .../java/org/apache/ranger/rest/ServiceREST.java   | 45 ++++++++++++++++++++--
 .../org/apache/ranger/rest/TestServiceREST.java    |  6 ++-
 2 files changed, 46 insertions(+), 5 deletions(-)

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 8fe2552cb..68f166230 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
@@ -63,6 +63,7 @@
 import org.apache.ranger.biz.ServiceDBStore;
 import org.apache.ranger.biz.ServiceDBStore.JSON_FILE_NAME_TYPE;
 import org.apache.ranger.biz.ServiceMgr;
+import org.apache.ranger.biz.UserMgr;
 import org.apache.ranger.biz.TagDBStore;
 import org.apache.ranger.biz.XUserMgr;
 import org.apache.ranger.common.AppConstants;
@@ -239,7 +240,10 @@ public class ServiceREST {
 
        @Autowired
        RangerTransactionSynchronizationAdapter 
rangerTransactionSynchronizationAdapter;
-       
+
+       @Autowired
+       UserMgr userMgrGrantor;
+
        private RangerPolicyEngineOptions delegateAdminOptions;
        private RangerPolicyEngineOptions policySearchAdminOptions;
        private RangerPolicyEngineOptions defaultAdminOptions;
@@ -1280,6 +1284,9 @@ public RESTResponse grantAccess(@PathParam("serviceName") 
String serviceName, Gr
        
                                                if(policyUpdated) {
                                                        
policy.setZoneName(zoneName);
+
+                                                       
ensureAdminAccess(policy, userName);
+
                                                        
svcStore.updatePolicy(policy);
                                                } else {
                                                        
LOG.error("processGrantRequest processing failed");
@@ -1317,6 +1324,8 @@ public RESTResponse grantAccess(@PathParam("serviceName") 
String serviceName, Gr
                                                
policy.addPolicyItem(policyItem);
                                                policy.setZoneName(zoneName);
 
+                                               ensureAdminAccess(policy, 
userName);
+
                                                svcStore.createPolicy(policy);
                                        }
                                } catch(WebApplicationException excp) {
@@ -1394,6 +1403,9 @@ public RESTResponse 
secureGrantAccess(@PathParam("serviceName") String serviceNa
 
                                                        if(policyUpdated) {
                                                                
policy.setZoneName(zoneName);
+
+                                                               
ensureAdminAccess(policy, userName);
+
                                                                
svcStore.updatePolicy(policy);
                                                        } else {
                                                                
LOG.error("processSecureGrantRequest processing failed");
@@ -1431,6 +1443,8 @@ public RESTResponse 
secureGrantAccess(@PathParam("serviceName") String serviceNa
                                                        
policy.addPolicyItem(policyItem);
                                                        
policy.setZoneName(zoneName);
 
+                                                       
ensureAdminAccess(policy, userName);
+
                                                        
svcStore.createPolicy(policy);
                                                }
                                        }else{
@@ -1512,6 +1526,9 @@ public RESTResponse 
revokeAccess(@PathParam("serviceName") String serviceName, G
 
                                                if(policyUpdated) {
                                                        
policy.setZoneName(zoneName);
+
+                                                       
ensureAdminAccess(policy, userName);
+
                                                        
svcStore.updatePolicy(policy);
                                                } else {
                                                        
LOG.error("processRevokeRequest processing failed");
@@ -1594,6 +1611,9 @@ public RESTResponse 
secureRevokeAccess(@PathParam("serviceName") String serviceN
 
                                                        if(policyUpdated) {
                                                                
policy.setZoneName(zoneName);
+
+                                                               
ensureAdminAccess(policy, userName);
+
                                                                
svcStore.updatePolicy(policy);
                                                        } else {
                                                                
LOG.error("processSecureRevokeRequest processing failed");
@@ -3629,9 +3649,26 @@ private List<RangerPolicy> 
applyAdminAccessFilter(List<RangerPolicy> policies) {
        }
 
        void ensureAdminAccess(RangerPolicy policy) {
-               boolean isAdmin = bizUtil.isAdmin();
-               boolean isKeyAdmin = bizUtil.isKeyAdmin();
-               String userName = bizUtil.getCurrentUserLoginId();
+               ensureAdminAccess(policy, null);
+       }
+
+       void ensureAdminAccess(RangerPolicy policy, String grantor) {
+               final String userName;
+               final boolean isAdmin;
+               final boolean isKeyAdmin;
+
+               if (StringUtils.isEmpty(grantor)) {
+                       userName   = bizUtil.getCurrentUserLoginId();
+                       isAdmin    = bizUtil.isAdmin();
+                       isKeyAdmin = bizUtil.isKeyAdmin();
+               } else {
+                       Collection<String> userRoles = 
userMgrGrantor.getRolesByLoginId(grantor);
+
+                       userName   = grantor;
+                       isAdmin    = 
userRoles.contains(RangerConstants.ROLE_SYS_ADMIN);
+                       isKeyAdmin = 
userRoles.contains(RangerConstants.ROLE_KEY_ADMIN);
+               }
+
                boolean isSvcAdmin = isAdmin || 
svcStore.isServiceAdminUser(policy.getService(), userName);
 
                if (!isAdmin && !isKeyAdmin && !isSvcAdmin) {
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 fad4552a9..5532b7817 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
@@ -39,6 +39,7 @@
 import org.apache.ranger.biz.ServiceDBStore.JSON_FILE_NAME_TYPE;
 import org.apache.ranger.biz.ServiceMgr;
 import org.apache.ranger.biz.TagDBStore;
+import org.apache.ranger.biz.UserMgr;
 import org.apache.ranger.biz.XUserMgr;
 import org.apache.ranger.common.ContextUtil;
 import org.apache.ranger.common.MessageEnums;
@@ -224,7 +225,8 @@ public class TestServiceREST {
        
        @Rule
        public ExpectedException thrown = ExpectedException.none();
-
+       @Mock
+       UserMgr           userMgrGrantor;
        private String capabilityVector;
 
        private final String grantor = "test-grantor-1";
@@ -2304,6 +2306,7 @@ public void test14bGrantAccess() throws Exception {
                
Mockito.when(xUserService.getXUserByUserName(Mockito.anyString())).thenReturn(Mockito.mock(VXUser.class));
                
Mockito.when(svcStore.getServiceByName(Mockito.anyString())).thenReturn(Mockito.mock(RangerService.class));
                
Mockito.when(bizUtil.isUserRangerAdmin(Mockito.anyString())).thenReturn(true);
+               
Mockito.when(userMgrGrantor.getRolesByLoginId(Mockito.anyString())).thenReturn(Arrays.asList("ROLE_SYS_ADMIN"));
                RESTResponse restResponse = serviceREST.grantAccess(serviceName,
                                grantRequestObj, request);
                Mockito.verify(svcStore, 
Mockito.times(1)).createPolicy(Mockito.any(RangerPolicy.class));
@@ -2326,6 +2329,7 @@ public void test64SecureGrantAccess(){
                mockValidateGrantRevokeRequest();
                Mockito.when(bizUtil.isAdmin()).thenReturn(true);
                
Mockito.when(bizUtil.isUserServiceAdmin(Mockito.any(RangerService.class), 
Mockito.anyString())).thenReturn(true);
+               
Mockito.when(userMgrGrantor.getRolesByLoginId(Mockito.anyString())).thenReturn(Arrays.asList("ROLE_SYS_ADMIN"));
                RESTResponse restResponse;
                try {
                        restResponse = 
serviceREST.secureGrantAccess(serviceName, grantRequestObj, request);

Reply via email to