Repository: ranger
Updated Branches:
  refs/heads/master 23624c64f -> 17deef643


RANGER-1801: group user mapping updates to ranger admin fail when the mapping 
is already existed in ranger DB --master


Project: http://git-wip-us.apache.org/repos/asf/ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/d31aabe2
Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/d31aabe2
Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/d31aabe2

Branch: refs/heads/master
Commit: d31aabe2fa3f21060a5ec7e8f0263d78c9f357e2
Parents: 23624c6
Author: Sailaja Polavarapu <[email protected]>
Authored: Tue Sep 26 13:53:49 2017 -0700
Committer: Sailaja Polavarapu <[email protected]>
Committed: Tue Sep 26 13:53:49 2017 -0700

----------------------------------------------------------------------
 .../main/java/org/apache/ranger/biz/XUserMgr.java |  3 +++
 .../java/org/apache/ranger/db/XXGroupUserDao.java | 18 ++++++++++++++++++
 .../apache/ranger/service/XGroupUserService.java  | 14 ++++++++++++--
 .../main/resources/META-INF/jpa_named_queries.xml |  5 +++++
 4 files changed, 38 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/d31aabe2/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java 
b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
index 447aebb..670baa3 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
@@ -573,6 +573,7 @@ public class XUserMgr extends XUserMgrBase {
                     .findByLoginId(vXUser.getName());
             if (xUser != null) {
                                // Add or update group user mapping only if the 
user already exists in x_user table.
+                               
logger.debug(String.format("createXGroupUserFromMap(): Create or update group 
%s ", vXGroup.getName()));
                                vXGroup = 
xGroupService.createXGroupWithOutLogin(vXGroup);
                                vxGUInfo.setXgroupInfo(vXGroup);
                                vxu.add(vXUser);
@@ -582,6 +583,8 @@ public class XUserMgr extends XUserMgrBase {
                 if (xXPortalUser.getUserSource() == 
RangerCommonEnums.USER_EXTERNAL) {
                     vXGroupUser = xGroupUserService
                             .createXGroupUserWithOutLogin(vXGroupUser);
+                   logger.debug(String.format("createXGroupUserFromMap(): 
Create or update group user mapping with groupname =  " + vXGroup.getName()
+                                                                               
        + " username = %s userId = %d", xXPortalUser.getLoginId(), 
xUser.getId()));
                 }
                 Collection<String> reqRoleList = vXUser.getUserRoleList();
 

http://git-wip-us.apache.org/repos/asf/ranger/blob/d31aabe2/security-admin/src/main/java/org/apache/ranger/db/XXGroupUserDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXGroupUserDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXGroupUserDao.java
index 1a76d27..c8c105d 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXGroupUserDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXGroupUserDao.java
@@ -27,6 +27,7 @@ import java.util.Set;
 
 import javax.persistence.NoResultException;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXGroupUser;
@@ -114,4 +115,21 @@ public class XXGroupUserDao extends BaseDao<XXGroupUser> {
                }
        }
 
+       public XXGroupUser findByGroupNameAndUserId(String groupName, Long 
userId) {
+               if (StringUtils.isNotBlank(groupName) && userId != null) {
+                       try {
+                               return getEntityManager()
+                                               
.createNamedQuery("XXGroupUser.findByGroupNameAndUserId", XXGroupUser.class)
+                                               .setParameter("userId", userId)
+                                               .setParameter("groupName", 
groupName)
+                                               .getSingleResult();
+                       } catch (NoResultException e) {
+                               logger.debug(e.getMessage());
+                       }
+               } else {
+                       logger.debug("userId and/or groupId not provided.");
+                       return new XXGroupUser();
+               }
+               return null;
+       }
 }

http://git-wip-us.apache.org/repos/asf/ranger/blob/d31aabe2/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java 
b/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java
index 7e8568b..bf39f5a 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java
@@ -79,7 +79,13 @@ public class XGroupUserService extends
        }
        
        public VXGroupUser createXGroupUserWithOutLogin(VXGroupUser 
vxGroupUser) {
-               XXGroupUser xxGroupUser = new XXGroupUser();
+               boolean groupUserMappingExists = true;
+               XXGroupUser xxGroupUser = 
daoManager.getXXGroupUser().findByGroupNameAndUserId(vxGroupUser.getName(), 
vxGroupUser.getUserId());
+               if (xxGroupUser == null) {
+                       xxGroupUser = new XXGroupUser();
+                       groupUserMappingExists = false;
+               }
+
                XXGroup xGroup = 
daoManager.getXXGroup().findByGroupName(vxGroupUser.getName());
                vxGroupUser.setParentGroupId(xGroup.getId());
                xxGroupUser = mapViewToEntityBean(vxGroupUser, xxGroupUser, 0);
@@ -88,7 +94,11 @@ public class XGroupUserService extends
                        xxGroupUser.setAddedByUserId(createdByUserId);
                        xxGroupUser.setUpdatedByUserId(createdByUserId);
                }
-               xxGroupUser = getDao().create(xxGroupUser);
+               if (groupUserMappingExists) {
+                       xxGroupUser = getDao().update(xxGroupUser);
+               } else {
+                       xxGroupUser = getDao().create(xxGroupUser);
+               }
                vxGroupUser = postCreate(xxGroupUser);
                return vxGroupUser;
        }

http://git-wip-us.apache.org/repos/asf/ranger/blob/d31aabe2/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
----------------------------------------------------------------------
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 68548a5..a212e59 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
@@ -189,6 +189,11 @@
                </query>
        </named-query>
 
+       <named-query name="XXGroupUser.findByGroupNameAndUserId">
+               <query>SELECT obj FROM XXGroupUser obj WHERE 
obj.name=:groupName AND obj.userId=:userId
+               </query>
+       </named-query>
+
        <named-query name="XXTrxLog.findByTrxId">
                <query>SELECT obj FROM XXTrxLog obj WHERE obj.transactionId = 
:transactionId
                </query>

Reply via email to