diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXGroupDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXGroupDao.java index 08e96f8392..942d2514c9 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXGroupDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXGroupDao.java @@ -25,12 +25,23 @@ import java.util.List; import java.util.Map; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.apache.commons.lang3.StringUtils; import org.apache.ranger.common.db.BaseDao; import org.apache.ranger.entity.XXGroup; +import org.apache.ranger.plugin.model.GroupInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import javax.persistence.NoResultException; + @Service public class XXGroupDao extends BaseDao { + private static final Logger logger = LoggerFactory.getLogger(XXGroupDao.class); + + private static final Gson gsonBuilder = new GsonBuilder().create(); public XXGroupDao(RangerDaoManagerBase daoManager) { super(daoManager); @@ -82,4 +93,43 @@ public Map getAllGroupIdNames() { } return groups; } + + + public List getAllGroupsInfo() { + List ret = new ArrayList<>(); + + try { + List rows = getEntityManager().createNamedQuery("XXGroup.getAllGroupsInfo", Object[].class).getResultList(); + + if (rows != null) { + for (Object[] row : rows) { + + ret.add(toGroupInfo(row)); + } + } + } catch (NoResultException excp) { + if (logger.isDebugEnabled()) { + logger.debug(excp.getMessage()); + } + } + + return ret; + } + + private GroupInfo toGroupInfo(Object[] row) { + String name = (String) row[0]; + String description = (String) row[1]; + String attributes = (String) row[2]; + Map attrMap = null; + + if (StringUtils.isNotBlank(attributes)) { + try { + attrMap = gsonBuilder.fromJson(attributes, Map.class); + } catch (Exception excp) { + // ignore + } + } + + return new GroupInfo(name, description, attrMap); + } } diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java index 283d84fe10..eb60288254 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java @@ -21,8 +21,12 @@ import javax.persistence.NoResultException; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.apache.commons.lang3.StringUtils; import org.apache.ranger.common.db.BaseDao; import org.apache.ranger.entity.XXUser; +import org.apache.ranger.plugin.model.UserInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -34,9 +38,12 @@ import java.util.ArrayList; import java.util.HashMap; + @Service public class XXUserDao extends BaseDao { - private static final Logger logger = LoggerFactory.getLogger(XXResourceDao.class); + private static final Logger logger = LoggerFactory.getLogger(XXUserDao.class); + + private static final Gson gsonBuilder = new GsonBuilder().create(); public XXUserDao(RangerDaoManagerBase daoManager) { super(daoManager); @@ -122,4 +129,42 @@ public List getAllUserIdNames() { } return users; } + + public List getAllUsersInfo() { + List ret = new ArrayList<>(); + + try { + List rows = getEntityManager().createNamedQuery("XXUser.getAllUsersInfo", Object[].class).getResultList(); + + if (rows != null) { + for (Object[] row : rows) { + + ret.add(toUserInfo(row)); + } + } + } catch (NoResultException excp) { + if (logger.isDebugEnabled()) { + logger.debug(excp.getMessage()); + } + } + + return ret; + } + + private UserInfo toUserInfo(Object[] row) { + String name = (String) row[0]; + String description = (String) row[1]; + String attributes = (String) row[2]; + Map attrMap = null; + + if (StringUtils.isNotBlank(attributes)) { + try { + attrMap = gsonBuilder.fromJson(attributes, Map.class); + } catch (Exception excp) { + // ignore + } + } + + return new UserInfo(name, description, attrMap); + } } diff --git a/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java index 5404eab385..3b50ed5fe2 100644 --- a/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java +++ b/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java @@ -25,10 +25,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import org.apache.ranger.common.SearchCriteria; import org.apache.ranger.entity.XXGroup; import org.apache.ranger.plugin.model.GroupInfo; @@ -40,7 +37,6 @@ public abstract class XGroupServiceBase extends AbstractBaseResourceService { public static final String NAME = "XGroup"; - private static final Gson gsonBuilder = new GsonBuilder().create(); public XGroupServiceBase() { @@ -108,18 +104,6 @@ public List searchXGroupsForIds(SearchCriteria searchCriteria){ } public List getGroups() { - List returnList = new ArrayList<>(); - - @SuppressWarnings("unchecked") - List resultList = daoManager.getXXGroup().getAll(); - - // Iterate over the result list and create the return list - for (XXGroup gjXGroup : resultList) { - GroupInfo groupInfo = new GroupInfo(gjXGroup.getName(), gjXGroup.getDescription(), gsonBuilder.fromJson(gjXGroup.getOtherAttributes(), Map.class)); - returnList.add(groupInfo); - } - - return returnList; + return daoManager.getXXGroup().getAllGroupsInfo(); } - } diff --git a/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java index 2fe54a9196..ffeb19c73a 100644 --- a/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java +++ b/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java @@ -25,10 +25,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import org.apache.ranger.common.SearchCriteria; import org.apache.ranger.entity.XXUser; import org.apache.ranger.plugin.model.UserInfo; @@ -40,7 +37,6 @@ public abstract class XUserServiceBase extends AbstractBaseResourceService { public static final String NAME = "XUser"; - private static final Gson gsonBuilder = new GsonBuilder().create(); public XUserServiceBase() { @@ -109,18 +105,6 @@ public List searchXUsersForIds(SearchCriteria searchCriteria){ } public List getUsers() { - List returnList = new ArrayList<>(); - - @SuppressWarnings("unchecked") - List resultList = daoManager.getXXUser().getAll(); - - // Iterate over the result list and create the return list - for (XXUser gjXUser : resultList) { - UserInfo userInfo = new UserInfo(gjXUser.getName(), gjXUser.getDescription(), gsonBuilder.fromJson(gjXUser.getOtherAttributes(), Map.class)); - returnList.add(userInfo); - } - - return returnList; + return daoManager.getXXUser().getAllUsersInfo(); } - } 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 3718b051a3..a099c4b9cf 100755 --- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml +++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml @@ -161,6 +161,13 @@ + + SELECT group.name, group.description, group.otherAttributes + FROM XXGroup group + WHERE group.isVisible = 1 + + + SELECT user.name, group.name FROM XXUser user, XXGroup group, XXGroupUser groupUser @@ -178,6 +185,13 @@ + + SELECT user.name, user.description, user.otherAttributes + FROM XXUser user + WHERE user.isVisible = 1 + + + SELECT group.name, user.name FROM XXUser user, XXGroup group, XXGroupUser groupUser WHERE user.id=groupUser.userId and group.id=groupUser.parentGroupId