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

abhay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new b2cebfd  RANGER-2548: Ranger-admin updates to ensure owner information 
in GrantRevokeData is correctly consumed
b2cebfd is described below

commit b2cebfd75f7c813651a37db76dc85a67e5e5536e
Author: Abhay Kulkarni <[email protected]>
AuthorDate: Wed Aug 28 16:15:42 2019 -0700

    RANGER-2548: Ranger-admin updates to ensure owner information in 
GrantRevokeData is correctly consumed
---
 .../policyengine/RangerPolicyEngineImpl.java       | 20 ++++++++--
 .../policyengine/RangerTagAccessRequest.java       |  6 +++
 .../RangerDefaultPolicyEvaluator.java              | 44 +++++++++-------------
 .../RangerDefaultPolicyItemEvaluator.java          | 21 +++++------
 .../RangerOptimizedPolicyEvaluator.java            | 12 +++---
 .../policyevaluator/RangerPolicyItemEvaluator.java |  2 +-
 .../ranger/plugin/service/RangerAuthContext.java   |  7 ++++
 .../plugin/util/RangerAccessRequestUtil.java       |  5 ++-
 .../java/org/apache/ranger/rest/ServiceREST.java   | 12 ++----
 9 files changed, 70 insertions(+), 59 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
index daa62f4..51cd658 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
@@ -439,6 +439,12 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                        
RangerAccessRequestUtil.setCurrentUserRolesInContext(request.getContext(), 
roles);
                }
 
+               String owner = request.getResource() != null ? 
request.getResource().getOwnerUser() : null;
+
+               if (StringUtils.isNotEmpty(owner)) {
+                       
RangerAccessRequestUtil.setOwnerInContext(request.getContext(), owner);
+               }
+
                List<RangerContextEnricher> enrichers = allContextEnrichers;
 
                if(!CollectionUtils.isEmpty(enrichers)) {
@@ -879,7 +885,7 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
        }
 
        /*
-        * This API is used by ranger-admin
+        * This API is used by ranger-admin - kept for backward compatibility
         */
 
        @Override
@@ -897,6 +903,10 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                return ret;
        }
 
+       /*
+        * This API is used by ranger-admin
+        */
+
        @Override
        public boolean isAccessAllowed(RangerPolicy policy, String user, 
Set<String> userGroups, Set<String> roles, String accessType) {
                if (LOG.isDebugEnabled()) {
@@ -1071,6 +1081,10 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                return ret;
        }
 
+       /*
+        * This API is used by ranger-admin
+        */
+
        @Override
        public List<RangerPolicy> getMatchingPolicies(RangerAccessRequest 
request) {
                if (LOG.isDebugEnabled()) {
@@ -1145,7 +1159,7 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
        }
 
        /*
-       * This API is used by ranger-admin
+       * This API is used by plugin code, but never used
        */
 
        @Override
@@ -1219,7 +1233,7 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
        }
 
        /*
-        * This API is used by test-code; checks only policies within default 
security-zone
+        * This API is used only by test-code; checks only policies within 
default security-zone
         */
 
        @Override
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerTagAccessRequest.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerTagAccessRequest.java
index cf590f9..ee605e8 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerTagAccessRequest.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerTagAccessRequest.java
@@ -20,6 +20,7 @@
 package org.apache.ranger.plugin.policyengine;
 
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.plugin.contextenricher.RangerTagForEval;
 import org.apache.ranger.plugin.model.RangerServiceDef;
 import 
org.apache.ranger.plugin.policyresourcematcher.RangerPolicyResourceMatcher;
@@ -45,6 +46,11 @@ public class RangerTagAccessRequest extends 
RangerAccessRequestImpl {
                
RangerAccessRequestUtil.setCurrentResourceInContext(request.getContext(), 
request.getResource());
                
RangerAccessRequestUtil.setCurrentUserInContext(request.getContext(), 
request.getUser());
 
+               String owner = request.getResource() != null ? 
request.getResource().getOwnerUser() : null;
+
+               if (StringUtils.isNotEmpty(owner)) {
+                       
RangerAccessRequestUtil.setOwnerInContext(request.getContext(), owner);
+               }
                super.setContext(requestContext);
 
                super.setClientType(request.getClientType());
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java
index ecd6cb7..4c1402a 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java
@@ -54,7 +54,6 @@ import 
org.apache.ranger.plugin.policyengine.RangerTagAccessRequest;
 import 
org.apache.ranger.plugin.policyresourcematcher.RangerDefaultPolicyResourceMatcher;
 import 
org.apache.ranger.plugin.policyresourcematcher.RangerPolicyResourceMatcher;
 import org.apache.ranger.plugin.resourcematcher.RangerResourceMatcher;
-import org.apache.ranger.plugin.util.RangerAccessRequestUtil;
 import org.apache.ranger.plugin.util.RangerPerfTracer;
 import org.apache.ranger.plugin.util.ServiceDefUtil;
 
@@ -340,10 +339,7 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
                        LOG.debug("==> 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + resource + ", " + user + ", " 
+ userGroups + ", " + roles + ", " + accessType + ")");
                }
 
-               Map<String, Object> evalContext = new HashMap<>();
-               RangerAccessRequestUtil.setCurrentUserInContext(evalContext, 
user);
-
-               boolean ret = isAccessAllowed(user, userGroups, roles, 
accessType) && isMatch(resource, evalContext);
+               boolean ret = isAccessAllowed(user, userGroups, roles, 
resource.getOwnerUser(), accessType) && isMatch(resource, null);
                
                if(LOG.isDebugEnabled()) {
                        LOG.debug("<== 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + resource + ", " + user + ", " 
+ userGroups + ", " + roles + ", " + accessType + "): " + ret);
@@ -362,10 +358,7 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
                        LOG.debug("==> 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + resources + ", " + user + ", " 
+ userGroups + ", " + accessType + ")");
                }
 
-               Map<String, Object> evalContext = new HashMap<>();
-               RangerAccessRequestUtil.setCurrentUserInContext(evalContext, 
user);
-
-               boolean ret = isAccessAllowed(user, userGroups, null, 
accessType) && isMatch(resources, evalContext);
+               boolean ret = isAccessAllowed(user, userGroups, null, user, 
accessType) && isMatch(resources, null);
 
                if(LOG.isDebugEnabled()) {
                        LOG.debug("<== 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + resources + ", " + user + ", " 
+ userGroups + ", " + accessType + "): " + ret);
@@ -380,10 +373,7 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
                        LOG.debug("==> 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + policy.getId() + ", " + user + 
", " + userGroups + ", " + roles + ", " + accessType + ")");
                }
 
-               Map<String, Object> evalContext = new HashMap<>();
-               RangerAccessRequestUtil.setCurrentUserInContext(evalContext, 
user);
-
-               boolean ret = isAccessAllowed(user, userGroups, roles, 
accessType) && isMatch(policy, evalContext);
+               boolean ret = isAccessAllowed(user, userGroups, roles, user, 
accessType) && isMatch(policy, null);
                
                if(LOG.isDebugEnabled()) {
                        LOG.debug("<== 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + policy.getId() + ", " + user + 
", " + userGroups + ", " + roles + ", " + accessType + "): " + ret);
@@ -724,9 +714,9 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
                return ret;
        }
 
-       protected RangerPolicyItemEvaluator getDeterminingPolicyItem(String 
user, Set<String> userGroups, Set<String> roles, String accessType) {
+       protected RangerPolicyItemEvaluator getDeterminingPolicyItem(String 
user, Set<String> userGroups, Set<String> roles, String owner, String 
accessType) {
                if(LOG.isDebugEnabled()) {
-                       LOG.debug("==> 
RangerDefaultPolicyEvaluator.getDeterminingPolicyItem(" + user + ", " + 
userGroups + ", " + roles + ", " + accessType + ")");
+                       LOG.debug("==> 
RangerDefaultPolicyEvaluator.getDeterminingPolicyItem(" + user + ", " + 
userGroups + ", " + roles + ", " + owner + ", " + accessType + ")");
                }
 
                RangerPolicyItemEvaluator ret = null;
@@ -735,14 +725,14 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
                 *  1. if a deny matches without hitting any deny-exception, 
return that
                 *  2. if an allow matches without hitting any allow-exception, 
return that
                 */
-               ret = getMatchingPolicyItem(user, userGroups, roles, 
accessType, denyEvaluators, denyExceptionEvaluators);
+               ret = getMatchingPolicyItem(user, userGroups, roles, owner, 
accessType, denyEvaluators, denyExceptionEvaluators);
 
                if(ret == null) {
-                       ret = getMatchingPolicyItem(user, userGroups, roles, 
accessType, allowEvaluators, allowExceptionEvaluators);
+                       ret = getMatchingPolicyItem(user, userGroups, roles, 
owner, accessType, allowEvaluators, allowExceptionEvaluators);
                }
 
                if(LOG.isDebugEnabled()) {
-                       LOG.debug("<== 
RangerDefaultPolicyEvaluator.getDeterminingPolicyItem(" + user + ", " + 
userGroups + ", " + roles + ", " + accessType + "): " + ret);
+                       LOG.debug("<== 
RangerDefaultPolicyEvaluator.getDeterminingPolicyItem(" + user + ", " + 
userGroups + ", " + roles + ", " + owner + ", " + accessType + "): " + ret);
                }
 
                return ret;
@@ -800,9 +790,9 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
                return ret;
        }
 
-       protected boolean isAccessAllowed(String user, Set<String> userGroups, 
Set<String> roles, String accessType) {
+       protected boolean isAccessAllowed(String user, Set<String> userGroups, 
Set<String> roles, String owner, String accessType) {
                if(LOG.isDebugEnabled()) {
-                       LOG.debug("==> 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + user + ", " + userGroups + ", 
" + roles + ", " + accessType + ")");
+                       LOG.debug("==> 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + user + ", " + userGroups + ", 
" + roles + ", " +  owner + ", " + accessType + ")");
                }
 
                boolean ret = false;
@@ -827,7 +817,7 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
                                LOG.debug("Using policyItemEvaluators for 
checking if access is allowed. PolicyId=[" + getId() +"]");
                        }
 
-                       RangerPolicyItemEvaluator item = 
this.getDeterminingPolicyItem(user, userGroups, roles, accessType);
+                       RangerPolicyItemEvaluator item = 
this.getDeterminingPolicyItem(user, userGroups, roles, owner, accessType);
 
                        if (item != null && item.getPolicyItemType() == 
RangerPolicyItemEvaluator.POLICY_ITEM_TYPE_ALLOW) {
                                ret = true;
@@ -837,7 +827,7 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
                RangerPerfTracer.log(perf);
 
                if(LOG.isDebugEnabled()) {
-                       LOG.debug("<== 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + user + ", " + userGroups + ", 
" + roles + ", " + accessType + "): " + ret);
+                       LOG.debug("<== 
RangerDefaultPolicyEvaluator.isAccessAllowed(" + user + ", " + userGroups + ", 
" + roles + ", " + owner + ", " + accessType + "): " + ret);
                }
 
                return ret;
@@ -1166,16 +1156,16 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
         return ret;
     }
 
-       private <T extends RangerPolicyItemEvaluator> T 
getMatchingPolicyItem(String user, Set<String> userGroups, Set<String> roles, 
String accessType, List<T> evaluators, List<T> exceptionEvaluators) {
+       private <T extends RangerPolicyItemEvaluator> T 
getMatchingPolicyItem(String user, Set<String> userGroups, Set<String> roles, 
String owner, String accessType, List<T> evaluators, List<T> 
exceptionEvaluators) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> 
RangerDefaultPolicyEvaluator.getMatchingPolicyItem(" + user + ", " + userGroups 
+ ", " + roles + ", " + accessType + ")");
+            LOG.debug("==> 
RangerDefaultPolicyEvaluator.getMatchingPolicyItem(" + user + ", " + userGroups 
+ ", " + roles + ", " + owner + ", " + accessType + ")");
         }
 
         T ret = null;
 
         if(CollectionUtils.isNotEmpty(evaluators)) {
             for (T evaluator : evaluators) {
-                if(evaluator.matchUserGroup(user, userGroups, roles) && 
evaluator.matchAccessType(accessType)) {
+                if(evaluator.matchUserGroupAndOwner(user, userGroups, roles, 
owner) && evaluator.matchAccessType(accessType)) {
                     ret = evaluator;
 
                     break;
@@ -1185,7 +1175,7 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
 
         if(ret != null && CollectionUtils.isNotEmpty(exceptionEvaluators)) {
             for (T exceptionEvaluator : exceptionEvaluators) {
-                if(exceptionEvaluator.matchUserGroup(user, userGroups, roles) 
&& exceptionEvaluator.matchAccessType(accessType)) {
+                if(exceptionEvaluator.matchUserGroupAndOwner(user, userGroups, 
roles, owner) && exceptionEvaluator.matchAccessType(accessType)) {
                     if(LOG.isDebugEnabled()) {
                         
LOG.debug("RangerDefaultPolicyEvaluator.getMatchingPolicyItem(" + user + ", " + 
userGroups + ", " + accessType + "): found exception policyItem(" + 
exceptionEvaluator.getPolicyItem() + "); ignoring the matchedPolicyItem(" + 
ret.getPolicyItem() + ")");
                     }
@@ -1198,7 +1188,7 @@ public class RangerDefaultPolicyEvaluator extends 
RangerAbstractPolicyEvaluator
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== 
RangerDefaultPolicyEvaluator.getMatchingPolicyItem(" + user + ", " + userGroups 
+ ", " + roles + ", " + accessType + "): " + ret);
+            LOG.debug("<== 
RangerDefaultPolicyEvaluator.getMatchingPolicyItem(" + user + ", " + userGroups 
+ ", " + roles + ", " + owner + ", " + accessType + "): " + ret);
         }
         return ret;
     }
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyItemEvaluator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyItemEvaluator.java
index 5bbbece..90d96d9 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyItemEvaluator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyItemEvaluator.java
@@ -160,9 +160,9 @@ public class RangerDefaultPolicyItemEvaluator extends 
RangerAbstractPolicyItemEv
        }
 
        @Override
-       public boolean matchUserGroup(String user, Set<String> userGroups, 
Set<String> roles) {
+       public boolean matchUserGroupAndOwner(String user, Set<String> 
userGroups, Set<String> roles, String owner) {
                if(LOG.isDebugEnabled()) {
-                       LOG.debug("==> 
RangerDefaultPolicyItemEvaluator.matchUserGroup(" + policyItem + ", " + user + 
", " + userGroups + ", " + roles + ")");
+                       LOG.debug("==> 
RangerDefaultPolicyItemEvaluator.matchUserGroup(" + policyItem + ", " + user + 
", " + userGroups + ", " + roles + ", " + owner + ")");
                }
 
                boolean ret = false;
@@ -171,7 +171,6 @@ public class RangerDefaultPolicyItemEvaluator extends 
RangerAbstractPolicyItemEv
                        if(!ret && user != null && policyItem.getUsers() != 
null) {
                                ret = hasCurrentUser || 
policyItem.getUsers().contains(user);
                        }
-
                        if(!ret && userGroups != null && policyItem.getGroups() 
!= null) {
                                ret = 
policyItem.getGroups().contains(RangerPolicyEngine.GROUP_PUBLIC) ||
                                                
!Collections.disjoint(policyItem.getGroups(), userGroups);
@@ -179,10 +178,13 @@ public class RangerDefaultPolicyItemEvaluator extends 
RangerAbstractPolicyItemEv
                        if (!ret && CollectionUtils.isNotEmpty(roles) && 
CollectionUtils.isNotEmpty(policyItem.getRoles())) {
                                ret = 
!Collections.disjoint(policyItem.getRoles(), roles);
                        }
+                       if (!ret && hasResourceOwner) {
+                               ret = user != null && user.equals(owner);
+                       }
                }
 
                if(LOG.isDebugEnabled()) {
-                       LOG.debug("<== 
RangerDefaultPolicyItemEvaluator.matchUserGroup(" + policyItem + ", " + user + 
", " + userGroups + ", " + roles + "): " + ret);
+                       LOG.debug("<== 
RangerDefaultPolicyItemEvaluator.matchUserGroup(" + policyItem + ", " + user + 
", " + userGroups + ", " + roles + ", " + owner + "): " + ret);
                }
 
                return ret;
@@ -198,20 +200,15 @@ public class RangerDefaultPolicyItemEvaluator extends 
RangerAbstractPolicyItemEv
                String user = request.getUser();
                Set<String> userGroups = request.getUserGroups();
 
-               if (hasResourceOwner) {
-                       RangerAccessResource accessedResource = 
request.getResource();
-                       String resourceOwner = accessedResource != null ? 
accessedResource.getOwnerUser() : null;
+               RangerAccessResource accessedResource = request.getResource();
+               String resourceOwner = accessedResource != null ? 
accessedResource.getOwnerUser() : null;
 
-                       if (user != null && resourceOwner != null && 
user.equals(resourceOwner)) {
-                               ret = true;
-                       }
-               }
                if (!ret) {
                        Set<String> roles = null;
                        if (CollectionUtils.isNotEmpty(policyItem.getRoles())) {
                                roles = 
RangerAccessRequestUtil.getCurrentUserRolesFromContext(request.getContext());
                        }
-                       ret = matchUserGroup(user, userGroups, roles);
+                       ret = matchUserGroupAndOwner(user, userGroups, roles, 
resourceOwner);
                }
 
                if(LOG.isDebugEnabled()) {
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerOptimizedPolicyEvaluator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerOptimizedPolicyEvaluator.java
index 00c0d42..bac076c 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerOptimizedPolicyEvaluator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerOptimizedPolicyEvaluator.java
@@ -234,15 +234,15 @@ public class RangerOptimizedPolicyEvaluator extends 
RangerDefaultPolicyEvaluator
     }
 
     @Override
-    protected boolean isAccessAllowed(String user, Set<String> userGroups, 
Set<String> roles, String accessType) {
+    protected boolean isAccessAllowed(String user, Set<String> userGroups, 
Set<String> roles, String owner, String accessType) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> RangerOptimizedPolicyEvaluator.isAccessAllowed(" + 
user + ", " + userGroups + ", " + roles + ", " + accessType + ")");
+            LOG.debug("==> RangerOptimizedPolicyEvaluator.isAccessAllowed(" + 
user + ", " + userGroups + ", " + roles + ", " + owner + ", " + accessType + 
")");
         }
 
-        boolean ret = hasMatchablePolicyItem(user, userGroups, roles, 
accessType) && super.isAccessAllowed(user, userGroups, roles, accessType);
+        boolean ret = hasMatchablePolicyItem(user, userGroups, roles, owner, 
accessType) && super.isAccessAllowed(user, userGroups, roles, owner, 
accessType);
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== RangerOptimizedPolicyEvaluator.isAccessAllowed(" + 
user + ", " + userGroups + ", " + roles + ", " + accessType + "): " + ret);
+            LOG.debug("<== RangerOptimizedPolicyEvaluator.isAccessAllowed(" + 
user + ", " + userGroups + ", " + roles + ", " + owner + ", " + accessType + 
"): " + ret);
         }
 
         return ret;
@@ -281,7 +281,7 @@ public class RangerOptimizedPolicyEvaluator extends 
RangerDefaultPolicyEvaluator
         return ret;
     }
 
-    private boolean hasMatchablePolicyItem(String user, Set<String> 
userGroups, Set<String> rolesFromContext, String accessType) {
+    private boolean hasMatchablePolicyItem(String user, Set<String> 
userGroups, Set<String> rolesFromContext, String owner, String accessType) {
         boolean ret = false;
 
         boolean hasRole = false;
@@ -291,7 +291,7 @@ public class RangerOptimizedPolicyEvaluator extends 
RangerDefaultPolicyEvaluator
             }
         }
 
-        if (hasPublicGroup || hasCurrentUser || users.contains(user) || 
CollectionUtils.containsAny(groups, userGroups) || hasRole) {
+        if (hasPublicGroup || hasCurrentUser || users.contains(user) || 
CollectionUtils.containsAny(groups, userGroups) || hasRole || (hasResourceOwner 
&& StringUtils.equals(user, owner))) {
             boolean isAdminAccess = StringUtils.equals(accessType, 
RangerPolicyEngine.ADMIN_ACCESS);
 
             if(isAdminAccess) {
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerPolicyItemEvaluator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerPolicyItemEvaluator.java
index ec3950f..1a2ea4c 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerPolicyItemEvaluator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerPolicyItemEvaluator.java
@@ -53,7 +53,7 @@ public interface RangerPolicyItemEvaluator {
 
        boolean isMatch(RangerAccessRequest request);
 
-       boolean matchUserGroup(String user, Set<String> userGroups, Set<String> 
roles);
+       boolean matchUserGroupAndOwner(String user, Set<String> userGroups, 
Set<String> roles, String owner);
 
        boolean matchAccessType(String accessType);
 
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerAuthContext.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerAuthContext.java
index 02f3431..3d0f107 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerAuthContext.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerAuthContext.java
@@ -21,6 +21,7 @@ package org.apache.ranger.plugin.service;
 
 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;
 import org.apache.ranger.plugin.contextenricher.RangerContextEnricher;
@@ -187,6 +188,12 @@ public class RangerAuthContext implements 
RangerPolicyEngine {
             
RangerAccessRequestUtil.setCurrentUserRolesInContext(request.getContext(), 
roles);
         }
 
+        String owner = request.getResource() != null ? 
request.getResource().getOwnerUser() : null;
+
+        if (StringUtils.isNotEmpty(owner)) {
+            RangerAccessRequestUtil.setOwnerInContext(request.getContext(), 
owner);
+        }
+
            if (MapUtils.isNotEmpty(requestContextEnrichers)) {
             for (Map.Entry<RangerContextEnricher, Object> entry : 
requestContextEnrichers.entrySet()) {
                 if (entry.getValue() instanceof RangerContextEnricher && 
entry.getKey().equals(entry.getValue())) {
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerAccessRequestUtil.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerAccessRequestUtil.java
index c8276f1..bd980ce 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerAccessRequestUtil.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerAccessRequestUtil.java
@@ -40,6 +40,7 @@ public class RangerAccessRequestUtil {
        public static final String KEY_CONTEXT_REQUESTED_RESOURCES = 
"REQUESTED_RESOURCES";
        public static final String KEY_TOKEN_NAMESPACE = "token:";
        public static final String KEY_USER = "USER";
+       public static final String KEY_OWNER = "OWNER";
        public static final String KEY_ROLES = "ROLES";
 
        public static void setRequestTagsInContext(Map<String, Object> context, 
Set<RangerTagForEval> tags) {
@@ -133,7 +134,9 @@ public class RangerAccessRequestUtil {
        public static void setCurrentUserInContext(Map<String, Object> context, 
String user) {
                setTokenInContext(context, KEY_USER, user);
        }
-
+       public static void setOwnerInContext(Map<String, Object> context, 
String owner) {
+               setTokenInContext(context, KEY_OWNER, owner);
+       }
        public static String getCurrentUserFromContext(Map<String, Object> 
context) {
                Object ret = getTokenFromContext(context, KEY_USER);
                return ret != null ? ret.toString() : "";
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 bb825b8..3d44315 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
@@ -113,7 +113,6 @@ import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.store.ServiceStore;
 import org.apache.ranger.plugin.util.GrantRevokeRequest;
 import org.apache.ranger.plugin.util.JsonUtilsV2;
-import org.apache.ranger.plugin.util.RangerAccessRequestUtil;
 import org.apache.ranger.plugin.util.RangerPerfTracer;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.plugin.util.ServicePolicies;
@@ -148,6 +147,7 @@ import com.google.gson.JsonSyntaxException;
 import com.sun.jersey.core.header.FormDataContentDisposition;
 import com.sun.jersey.multipart.FormDataParam;
 
+
 @Path("plugins")
 @Component
 @Scope("request")
@@ -3216,10 +3216,7 @@ public class ServiceREST {
                RangerPolicy       ret          = null;
                RangerPolicyEngine policyEngine = getPolicyEngine(serviceName);
 
-               Map<String, Object> evalContext = new HashMap<String, Object>();
-               RangerAccessRequestUtil.setCurrentUserInContext(evalContext, 
user);
-
-               List<RangerPolicy> policies     = policyEngine != null ? 
policyEngine.getExactMatchPolicies(resource, evalContext) : null;
+               List<RangerPolicy> policies     = policyEngine != null ? 
policyEngine.getExactMatchPolicies(resource, null) : null;
 
                if(CollectionUtils.isNotEmpty(policies)) {
                        // at this point, ret is a policy in policy-engine; the 
caller might update the policy (for grant/revoke); so get a copy from the store
@@ -3241,10 +3238,7 @@ public class ServiceREST {
                RangerPolicy       ret          = null;
                RangerPolicyEngine policyEngine = 
getPolicyEngine(policy.getService());
 
-               Map<String, Object> evalContext = new HashMap<String, Object>();
-               RangerAccessRequestUtil.setCurrentUserInContext(evalContext, 
user);
-
-               List<RangerPolicy> policies     = policyEngine != null ? 
policyEngine.getExactMatchPolicies(policy, evalContext) : null;
+               List<RangerPolicy> policies     = policyEngine != null ? 
policyEngine.getExactMatchPolicies(policy, null) : null;
 
                if(CollectionUtils.isNotEmpty(policies)) {
                        // at this point, ret is a policy in policy-engine; the 
caller might update the policy (for grant/revoke); so get a copy from the store

Reply via email to