This is an automated email from the ASF dual-hosted git repository. madhan pushed a commit to branch RANGER-3923 in repository https://gitbox.apache.org/repos/asf/ranger.git
commit 7528f5d1385bbbcba44bb22157a7e12df38f0570 Author: Prashant Satam <prashant.sa...@privacera.com> AuthorDate: Fri Sep 29 10:43:41 2023 -0700 RANGER-4410: added additional filters in APIs to search datasets, dataShares, projects Signed-off-by: Madhan Neethiraj <mad...@apache.org> --- .../apache/ranger/plugin/util/SearchFilter.java | 16 +++- .../java/org/apache/ranger/biz/GdsDBStore.java | 1 - .../org/apache/ranger/common/RangerSearchUtil.java | 6 +- .../ranger/service/RangerBaseModelService.java | 99 +++++++++++----------- .../ranger/service/RangerGdsDataShareService.java | 25 ++++-- .../ranger/service/RangerGdsDatasetService.java | 25 ++++-- .../ranger/service/RangerGdsProjectService.java | 25 ++++-- 7 files changed, 119 insertions(+), 78 deletions(-) diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java old mode 100644 new mode 100755 index 1a1a78064..5be7cebbb --- a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java @@ -61,6 +61,7 @@ public class SearchFilter { public static final String POLICY_LABEL_ID = "policyLabelId"; // search, sort public static final String ZONE_ID = "zoneId"; // search, sort public static final String ZONE_NAME = "zoneName"; // search, sort + public static final String ZONE_NAME_PARTIAL = "zoneNamePartial"; // search, sort public static final String NOT_ZONE_NAME = "notZoneName"; // search public static final String ROLE_ID = "roleId"; // search, sort public static final String ROLE_NAME = "roleName"; // search, sort @@ -99,10 +100,13 @@ public class SearchFilter { public static final String SERVICE_TYPE_DISPLAY_NAME = "serviceTypeDisplayName"; // search, sort public static final String DATASET_NAME = "datasetName"; // search, sort + public static final String DATASET_NAME_PARTIAL = "datasetNamePartial"; // search, sort public static final String DATASET_ID = "datasetId"; // search, sort public static final String PROJECT_NAME = "projectName"; // search, sort + public static final String PROJECT_NAME_PARTIAL = "projectNamePartial"; // search, sort public static final String PROJECT_ID = "projectId"; // search, sort public static final String DATA_SHARE_NAME = "dataShareName"; // search, sort + public static final String DATA_SHARE_NAME_PARTIAL = "dataShareNamePartial"; // search, sort public static final String DATA_SHARE_ID = "dataShareId"; // search, sort public static final String SHARED_RESOURCE_NAME = "sharedResourceName"; // search, sort public static final String SHARED_RESOURCE_ID = "sharedResourceId"; // search, sort @@ -111,7 +115,7 @@ public class SearchFilter { public static final String OWNER_TYPE = "ownerType"; // search: valid-values(user, group, role) public static final String DATA_SHARE_IN_DATASET_ID = "dataShareInDatasetId"; // search, sort public static final String DATASET_IN_PROJECT_ID = "datasetInProjectId"; // search, sort - public static final String GDS_PERMISSION = "gdsPermission"; // search, sort + public static final String IS_DISTINCT = "isDistinct"; // search, sort private Map<String, String> params; private int startIndex; @@ -119,6 +123,7 @@ public class SearchFilter { private boolean getCount = true; private String sortBy; private String sortType; + private boolean isDistinct = true; public SearchFilter() { this((Map<String, String>) null); @@ -245,6 +250,14 @@ public class SearchFilter { this.sortType = sortType; } + public boolean isDistinct() { + return isDistinct; + } + + public void setDistinct(boolean isDistinct) { + this.isDistinct = isDistinct; + } + @Override public boolean equals(Object object) { if (object == null || !(object instanceof SearchFilter)) { @@ -277,6 +290,7 @@ public class SearchFilter { sb.append("sortBy={").append(sortBy).append("} "); sb.append("sortType={").append(sortType).append("} "); sb.append("startIndex={").append(startIndex).append("} "); + sb.append("isDistinct={").append(isDistinct).append("} "); sb.append("}"); return sb; diff --git a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java index ff6b2b23e..909a74fe2 100755 --- a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java +++ b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java @@ -264,7 +264,6 @@ public class GdsDBStore extends AbstractGdsStore { if (gdsPermission == null) { gdsPermission = GdsPermission.VIEW; } - RangerDatasetList result = datasetService.searchDatasets(filter); List<RangerDataset> datasets = new ArrayList<>(); diff --git a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java old mode 100644 new mode 100755 index 51da7d15d..66accbc0c --- a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java +++ b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java @@ -77,6 +77,8 @@ public class RangerSearchUtil extends SearchUtil { ret.setParam(SearchFilter.PLUGIN_ENTITY_TYPE, request.getParameter(SearchFilter.PLUGIN_ENTITY_TYPE)); ret.setParam(SearchFilter.PLUGIN_IP_ADDRESS, request.getParameter(SearchFilter.PLUGIN_IP_ADDRESS)); ret.setParam(SearchFilter.ZONE_NAME, request.getParameter(SearchFilter.ZONE_NAME)); + ret.setParam(SearchFilter.ZONE_NAME_PARTIAL, request.getParameter(SearchFilter.ZONE_NAME_PARTIAL)); + ret.setParam(SearchFilter.ZONE_ID, request.getParameter(SearchFilter.ZONE_ID)); ret.setParam(SearchFilter.TAG_SERVICE_ID, request.getParameter(SearchFilter.TAG_SERVICE_ID)); ret.setParam(SearchFilter.ROLE_NAME, request.getParameter(SearchFilter.ROLE_NAME)); ret.setParam(SearchFilter.ROLE_ID, request.getParameter(SearchFilter.ROLE_ID)); @@ -100,16 +102,18 @@ public class RangerSearchUtil extends SearchUtil { ret.setParam(SearchFilter.RESOURCE_MATCH_SCOPE, request.getParameter(SearchFilter.RESOURCE_MATCH_SCOPE)); ret.setParam(SearchFilter.DATASET_NAME, request.getParameter(SearchFilter.DATASET_NAME)); + ret.setParam(SearchFilter.DATASET_NAME_PARTIAL, request.getParameter(SearchFilter.DATASET_NAME_PARTIAL)); ret.setParam(SearchFilter.DATASET_ID, request.getParameter(SearchFilter.DATASET_ID)); ret.setParam(SearchFilter.PROJECT_NAME, request.getParameter(SearchFilter.PROJECT_NAME)); + ret.setParam(SearchFilter.PROJECT_NAME_PARTIAL, request.getParameter(SearchFilter.PROJECT_NAME_PARTIAL)); ret.setParam(SearchFilter.PROJECT_ID, request.getParameter(SearchFilter.PROJECT_ID)); ret.setParam(SearchFilter.DATA_SHARE_NAME, request.getParameter(SearchFilter.DATA_SHARE_NAME)); + ret.setParam(SearchFilter.DATA_SHARE_NAME_PARTIAL, request.getParameter(SearchFilter.DATA_SHARE_NAME_PARTIAL)); ret.setParam(SearchFilter.DATA_SHARE_ID, request.getParameter(SearchFilter.DATA_SHARE_ID)); ret.setParam(SearchFilter.SHARED_RESOURCE_ID, request.getParameter(SearchFilter.SHARED_RESOURCE_ID)); ret.setParam(SearchFilter.PROFILE_NAME, request.getParameter(SearchFilter.PROFILE_NAME)); ret.setParam(SearchFilter.OWNER_NAME, request.getParameter(SearchFilter.OWNER_NAME)); ret.setParam(SearchFilter.OWNER_TYPE, request.getParameter(SearchFilter.OWNER_TYPE)); - ret.setParam(SearchFilter.GDS_PERMISSION, request.getParameter(SearchFilter.GDS_PERMISSION)); extractCommonCriteriasForFilter(request, ret, sortFields); diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java old mode 100644 new mode 100755 index 4128d70df..032978701 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java @@ -52,8 +52,14 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; public abstract class RangerBaseModelService<T extends XXDBBase, V extends RangerBaseModelObject> { - private static final Logger LOG = LoggerFactory - .getLogger(RangerBaseModelService.class); + private static final Logger LOG = LoggerFactory.getLogger(RangerBaseModelService.class); + + public static final int OPERATION_CREATE_CONTEXT = 1; + public static final int OPERATION_UPDATE_CONTEXT = 2; + public static final int OPERATION_DELETE_CONTEXT = 3; + public static final int OPERATION_IMPORT_CREATE_CONTEXT = 4; + public static final int OPERATION_IMPORT_DELETE_CONTEXT = 5; + @Autowired protected RangerDaoManager daoMgr; @@ -66,54 +72,51 @@ public abstract class RangerBaseModelService<T extends XXDBBase, V extends Range @Autowired protected RangerSearchUtil searchUtil; - - @Autowired - RangerBizUtil bizUtil; - - public static final int OPERATION_CREATE_CONTEXT = 1; - public static final int OPERATION_UPDATE_CONTEXT = 2; - public static final int OPERATION_DELETE_CONTEXT = 3; - public static final int OPERATION_IMPORT_CREATE_CONTEXT = 4; - public static final int OPERATION_IMPORT_DELETE_CONTEXT = 5; - protected Class<T> tEntityClass; - protected Class<V> tViewClass; - private Boolean populateExistingBaseFields; - protected String tClassName; - - public List<SortField> sortFields = new ArrayList<SortField>(); - public List<SearchField> searchFields = new ArrayList<SearchField>(); - protected final String countQueryStr; - protected String queryStr; @Autowired protected BaseDao<T> entityDao; + @Autowired + RangerBizUtil bizUtil; + + public final List<SortField> sortFields = new ArrayList<>(); + public final List<SearchField> searchFields = new ArrayList<>(); + protected final Class<T> tEntityClass; + protected final Class<V> tViewClass; + protected final String tClassName; + protected final String countQueryStr; + protected final String distinctCountQueryStr; + protected final String queryStr; + protected final String distinctQueryStr; + private Boolean populateExistingBaseFields; + @SuppressWarnings("unchecked") public RangerBaseModelService() { - Class klass = getClass(); - ParameterizedType genericSuperclass = (ParameterizedType) klass - .getGenericSuperclass(); - TypeVariable<Class<?>> var[] = klass.getTypeParameters(); + Class klass = getClass(); + ParameterizedType genericSuperclass = (ParameterizedType) klass.getGenericSuperclass(); + TypeVariable<Class<?>> var[] = klass.getTypeParameters(); if (genericSuperclass.getActualTypeArguments()[0] instanceof Class) { - tEntityClass = (Class<T>) genericSuperclass - .getActualTypeArguments()[0]; - tViewClass = (Class<V>) genericSuperclass.getActualTypeArguments()[1]; + tEntityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0]; + tViewClass = (Class<V>) genericSuperclass.getActualTypeArguments()[1]; } else if (var.length > 0) { tEntityClass = (Class<T>) var[0].getBounds()[0]; - tViewClass = (Class<V>) var[1].getBounds()[0]; + tViewClass = (Class<V>) var[1].getBounds()[0]; } else { LOG.error("Cannot find class for template", new Throwable()); - } - - if (tEntityClass != null) { - tClassName = tEntityClass.getName(); + + tEntityClass = null; + tViewClass = null; } + tClassName = (tEntityClass != null) ? tEntityClass.getName() : "XXDBBase"; + populateExistingBaseFields = false; - - countQueryStr = "SELECT COUNT(obj) FROM " + tClassName + " obj "; - queryStr = "SELECT obj FROM " + tClassName + " obj "; + + countQueryStr = "SELECT COUNT(obj) FROM " + tClassName + " obj "; + distinctCountQueryStr = "SELECT COUNT(distinct obj.id) FROM " + tClassName + " obj "; + queryStr = "SELECT obj FROM " + tClassName + " obj "; + distinctQueryStr = "SELECT DISTINCT obj FROM " + tClassName + " obj "; } protected abstract T mapViewToEntityBean(V viewBean, T t, @@ -160,12 +163,12 @@ public abstract class RangerBaseModelService<T extends XXDBBase, V extends Range } protected T populateEntityBeanForCreate(T entityObj, V vObj) { - if(!populateExistingBaseFields) { + if (!populateExistingBaseFields) { entityObj.setCreateTime(DateUtil.getUTCDate()); entityObj.setUpdateTime(entityObj.getCreateTime()); entityObj.setAddedByUserId(ContextUtil.getCurrentUserId()); entityObj.setUpdatedByUserId(entityObj.getAddedByUserId()); - } else if(populateExistingBaseFields) { + } else { XXPortalUser createdByUser = daoMgr.getXXPortalUser().findByLoginId(vObj.getCreatedBy()); XXPortalUser updByUser = daoMgr.getXXPortalUser().findByLoginId(vObj.getUpdatedBy()); @@ -349,13 +352,11 @@ public abstract class RangerBaseModelService<T extends XXDBBase, V extends Range return Collections.emptyList(); } } - - String sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList); - - String q = queryStr; - Query query = createQuery(q, sortClause, searchCriteria, searchFieldList, false); - List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, query); + String sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList); + String q = searchCriteria.isDistinct() ? distinctQueryStr : queryStr; + Query query = createQuery(q, sortClause, searchCriteria, searchFieldList, false); + List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, query); if (vList != null) { vList.setResultSize(resultList.size()); @@ -398,15 +399,11 @@ public abstract class RangerBaseModelService<T extends XXDBBase, V extends Range } protected long getCountForSearchQuery(SearchFilter searchCriteria, List<SearchField> searchFieldList) { + String q = searchCriteria.isDistinct() ? distinctCountQueryStr : countQueryStr; + Query query = createQuery(q, null, searchCriteria, searchFieldList, true); + Long count = getDao().executeCountQueryInSecurityContext(tEntityClass, query); - String q = countQueryStr; - Query query = createQuery(q, null, searchCriteria, searchFieldList, true); - Long count = getDao().executeCountQueryInSecurityContext(tEntityClass, query); - - if (count == null) { - return 0; - } - return count.longValue(); + return (count == null) ? 0 : count.longValue(); } protected Query createQuery(String searchString, String sortString, SearchFilter searchCriteria, diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java old mode 100644 new mode 100755 index a07fb9ea7..773fcb873 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java @@ -55,14 +55,23 @@ public class RangerGdsDataShareService extends RangerGdsBaseModelService<XXGdsDa public RangerGdsDataShareService() { super(); - searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.GUID , "obj.guid", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", SearchField.DATA_TYPE.BOOLEAN, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.id = dshid.dataShareId and dshid.datasetId = d.id")); - searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.dataShareId")); - searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id")); - searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId")); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL)); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.GUID , "obj.guid", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", SearchField.DATA_TYPE.BOOLEAN, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.id = dshid.dataShareId and dshid.datasetId = d.id")); + searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.id = dshid.dataShareId and dshid.datasetId = d.id")); + searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.dataShareId")); + searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id")); + searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id")); + searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId")); + searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXService s", "obj.serviceId = s.id")); + searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXService s", "obj.serviceId = s.id")); + searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "obj.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXSecurityZone z", "obj.zoneId = z.id")); + searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXSecurityZone z", "obj.zoneId = z.id")); + searchFields.add(new SearchField(SearchFilter.ZONE_ID, "obj.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL)); sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime")); sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime")); diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java old mode 100644 new mode 100755 index 747cc9f17..3cf4815c7 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java @@ -51,14 +51,23 @@ public class RangerGdsDatasetService extends RangerGdsBaseModelService<XXGdsData public RangerGdsDatasetService() { super(); - searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.GUID , "obj.guid", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", SearchField.DATA_TYPE.BOOLEAN, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "proj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsProject proj", "obj.id = dip.datasetId and dip.projectId = proj.id")); - searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = dip.datasetId")); - searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "ds.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id")); - searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.datasetId")); + searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL)); + searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.GUID , "obj.guid", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", SearchField.DATA_TYPE.BOOLEAN, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "proj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsProject proj", "obj.id = dip.datasetId and dip.projectId = proj.id")); + searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "proj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsProject proj", "obj.id = dip.datasetId and dip.projectId = proj.id")); + searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = dip.datasetId")); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "ds.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset ds XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id")); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "ds.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset ds XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id")); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.datasetId")); + searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id")); + searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id")); + searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id")); + searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id")); + searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id")); + searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id")); sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime")); sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime")); diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java old mode 100644 new mode 100755 index 8c0ddc65d..1da1456a6 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java @@ -51,14 +51,23 @@ public class RangerGdsProjectService extends RangerGdsBaseModelService<XXGdsProj public RangerGdsProjectService() { super(); - searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.GUID , "obj.guid", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", SearchField.DATA_TYPE.BOOLEAN, SearchField.SEARCH_TYPE.FULL)); - searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataset d", "obj.id = dip.projectId and dip.datasetId = d.id")); - searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dip.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = dip.projectId")); - searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id")); - searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dsid", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId")); + searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL)); + searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.GUID , "obj.guid", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", SearchField.DATA_TYPE.BOOLEAN, SearchField.SEARCH_TYPE.FULL)); + searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataset d", "obj.id = dip.projectId and dip.datasetId = d.id")); + searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataset d", "obj.id = dip.projectId and dip.datasetId = d.id")); + searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dip.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = dip.projectId")); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id")); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id")); + searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsDataShareInDataset dsid", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId")); + searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id")); + searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id")); + searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id")); + searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id")); + searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id")); + searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id")); sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime")); sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));