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

pradeep 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 b66eafe  RANGER-2485: Security zone filter is causing Ranger audit 
access request waiting for longer
b66eafe is described below

commit b66eafe0802ba9656b705103e9ed7ab5accbd916
Author: Pradeep <[email protected]>
AuthorDate: Wed Jun 26 16:28:17 2019 +0530

    RANGER-2485: Security zone filter is causing Ranger audit access request 
waiting for longer
---
 .../main/java/org/apache/ranger/biz/AssetMgr.java  | 69 ++++++++--------------
 .../org/apache/ranger/db/XXSecurityZoneDao.java    | 26 +++++++-
 .../main/resources/META-INF/jpa_named_queries.xml  | 12 ++++
 3 files changed, 61 insertions(+), 46 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java 
b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
index 1a78790..f5fce93 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
@@ -52,9 +52,6 @@ import org.apache.ranger.entity.XXPermMap;
 import org.apache.ranger.entity.XXPluginInfo;
 import org.apache.ranger.entity.XXPolicyExportAudit;
 import org.apache.ranger.entity.XXPortalUser;
-import org.apache.ranger.entity.XXSecurityZone;
-import org.apache.ranger.entity.XXSecurityZoneRefGroup;
-import org.apache.ranger.entity.XXSecurityZoneRefUser;
 import org.apache.ranger.entity.XXTrxLog;
 import org.apache.ranger.entity.XXUser;
 import org.apache.ranger.plugin.model.RangerPluginInfo;
@@ -973,54 +970,36 @@ public class AssetMgr extends AssetMgrBase {
             searchCriteria.setSortType("desc");
         }
 
-               Set<String> zoneNameSet = new HashSet<String>();
-               Long userId = xaBizUtil.getXUserId();
-               VXGroupList groupList = xUserMgr.getXUserGroups(userId);
-               List<XXSecurityZoneRefUser> zoneRefUserList = rangerDaoManager
-                               
.getXXSecurityZoneRefUser().findByUserId(userId);
-               for (XXSecurityZoneRefUser zoneRefUser : zoneRefUserList) {
-                       XXSecurityZone securityZone = rangerDaoManager
-                                       .getXXSecurityZoneDao().findByZoneId(
-                                                       
zoneRefUser.getZoneId());
-                       if (securityZone != null) {
-                               zoneNameSet.add(securityZone.getName());
-                       }
-               }
+        if (!xaBizUtil.isAdmin()) {
+                       Long userId = xaBizUtil.getXUserId();
+               List<String> userZones = 
rangerDaoManager.getXXSecurityZoneDao().findZoneNamesByUserId(userId);
+                       Set<String> zoneNameSet = new 
HashSet<String>(userZones);
 
-               for (VXGroup group : groupList.getList()) {
-                       List<XXSecurityZoneRefGroup> zoneRefGroupList = 
rangerDaoManager
-                                       
.getXXSecurityZoneRefGroup().findByGroupId(group.getId());
-                       for (XXSecurityZoneRefGroup zoneRefGroup : 
zoneRefGroupList) {
-                               XXSecurityZone securityZone = rangerDaoManager
-                                               
.getXXSecurityZoneDao().findByZoneId(
-                                                               
zoneRefGroup.getZoneId());
-                               if (securityZone != null) {
-                                       zoneNameSet.add(securityZone.getName());
+                       VXGroupList groupList = xUserMgr.getXUserGroups(userId);
+                       for (VXGroup group : groupList.getList()) {
+                               List<String> userGroupZones = 
rangerDaoManager.getXXSecurityZoneDao().findZoneNamesByGroupId(group.getId());
+                               for (String zoneName : userGroupZones) {
+                                       zoneNameSet.add(zoneName);
                                }
                        }
-               }
-               List<String> zoneNameList = (List<String>) 
searchCriteria.getParamValue("zoneName");
 
-               if (!xaBizUtil.isAdmin()
-                               && (zoneNameList == null || 
zoneNameList.isEmpty())) {
-                       if (!zoneNameSet.isEmpty()) {
-                               searchCriteria.getParamList().put("zoneName",
-                                               new 
ArrayList<String>(zoneNameSet));
-                       } else {
-                               searchCriteria.getParamList().put("zoneName", 
null);
-                       }
-               } else if (!xaBizUtil.isAdmin() && !zoneNameList.isEmpty()
-                               && !zoneNameSet.isEmpty()) {
-                       for (String znName : zoneNameList) {
-                               if (!serviceMgr.isZoneAdmin(znName)
-                                               && 
!serviceMgr.isZoneAuditor(znName)) {
-                                       throw restErrorUtil.createRESTException(
-                                                       
HttpServletResponse.SC_FORBIDDEN,
-                                                       "User is not the zone 
admin or zone auditor of zone "
-                                                                       + 
znName, true);
+                       List<String> zoneNameList = (List<String>) 
searchCriteria.getParamValue("zoneName");
+
+                       if ((zoneNameList == null || zoneNameList.isEmpty())) {
+                               if (!zoneNameSet.isEmpty()) {
+                                       
searchCriteria.getParamList().put("zoneName", new 
ArrayList<String>(zoneNameSet));
+                               } else {
+                                       
searchCriteria.getParamList().put("zoneName", null);
+                               }
+                       } else if (!zoneNameList.isEmpty() && 
!zoneNameSet.isEmpty()) {
+                               for (String znName : zoneNameList) {
+                                       if (!serviceMgr.isZoneAdmin(znName) && 
!serviceMgr.isZoneAuditor(znName)) {
+                                               throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_FORBIDDEN, "User is 
not the zone admin or zone auditor of zone " + znName, true);
+                                       }
                                }
                        }
-               }
+        }
+
         if 
(RangerBizUtil.AUDIT_STORE_SOLR.equalsIgnoreCase(xaBizUtil.getAuditDBType())) {
             return solrAccessAuditsService.searchXAccessAudits(searchCriteria);
         } else {
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXSecurityZoneDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXSecurityZoneDao.java
index c0f0666..78296e2 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXSecurityZoneDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXSecurityZoneDao.java
@@ -21,7 +21,6 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXSecurityZone;
 import org.springframework.stereotype.Service;
-
 import javax.persistence.NoResultException;
 import java.util.Collections;
 import java.util.List;
@@ -73,4 +72,29 @@ public class XXSecurityZoneDao extends 
BaseDao<XXSecurityZone> {
             return Collections.emptyList();
         }
     }
+
+       public List<String> findZoneNamesByUserId(Long userId) {
+               if (userId == null) {
+                       return Collections.emptyList();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXSecurityZone.findZoneNamesByUserId", 
String.class)
+                                       .setParameter("userId", 
userId).getResultList();
+               } catch (NoResultException e) {
+                       return Collections.emptyList();
+               }
+       }
+
+       public List<String> findZoneNamesByGroupId(Long groupId) {
+               if (groupId == null) {
+                       return Collections.emptyList();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXSecurityZone.findZoneNamesByGroupId", 
String.class)
+                                       .setParameter("groupId", 
groupId).getResultList();
+               } catch (NoResultException e) {
+                       return Collections.emptyList();
+               }
+       }
+
 }
diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml 
b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
index 54e34d5..eb0384b 100644
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -1408,6 +1408,18 @@
         </query>
     </named-query>
 
+       <named-query name="XXSecurityZone.findZoneNamesByUserId">
+        <query>
+            select distinct obj.name from XXSecurityZone obj, 
XXSecurityZoneRefUser refObj where obj.id = refObj.zoneId and refObj.userId = 
:userId
+        </query>
+    </named-query>
+
+       <named-query name="XXSecurityZone.findZoneNamesByGroupId">
+        <query>
+            select distinct obj.name from XXSecurityZone obj, 
XXSecurityZoneRefGroup refObj where obj.id = refObj.zoneId and refObj.groupId = 
:groupId
+        </query>
+    </named-query>
+
     <named-query name="XXGlobalState.findByStateId">
         <query>
             select obj from XXGlobalState obj where obj.id = :stateId

Reply via email to