You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ab...@apache.org on 2020/11/13 01:03:59 UTC

[ranger] branch ranger-2.2 updated: RANGER-3065: RangerServiceResource model object needs to be enhanced to store/track any additional information about the resource

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

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


The following commit(s) were added to refs/heads/ranger-2.2 by this push:
     new 2003889  RANGER-3065: RangerServiceResource model object needs to be enhanced to store/track any additional information about the resource
2003889 is described below

commit 20038898779b8c509930181d9e0b6c69e65b6501
Author: Abhay Kulkarni <ab...@apache.org>
AuthorDate: Thu Nov 12 16:55:11 2020 -0800

    RANGER-3065: RangerServiceResource model object needs to be enhanced to store/track any additional information about the resource
---
 .../ranger/plugin/model/RangerServiceResource.java | 23 +++++++-
 .../ranger/plugin/store/StoredServiceResource.java | 62 ++++++++++++++++++++++
 .../apache/ranger/db/XXRMSServiceResourceDao.java  | 43 +++++++--------
 3 files changed, 103 insertions(+), 25 deletions(-)

diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceResource.java b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceResource.java
index bdd3e54..47d0060 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceResource.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceResource.java
@@ -41,14 +41,19 @@ public class RangerServiceResource extends RangerBaseModelObject {
 	private Map<String, RangerPolicy.RangerPolicyResource> resourceElements;
 	private String                                         ownerUser;
 	private String                                         resourceSignature;
+	private Map<String, String>							   additionalInfo;
 
-	public RangerServiceResource(String guid, String serviceName, Map<String, RangerPolicy.RangerPolicyResource> resourceElements, String resourceSignature, String ownerUser) {
+	public RangerServiceResource(String guid, String serviceName, Map<String, RangerPolicy.RangerPolicyResource> resourceElements, String resourceSignature, String ownerUser, Map<String, String> additionalInfo) {
 		super();
 		setGuid(guid);
 		setServiceName(serviceName);
 		setResourceElements(resourceElements);
 		setResourceSignature(resourceSignature);
 		setOwnerUser(ownerUser);
+		setAdditionalInfo(additionalInfo);
+	}
+	public RangerServiceResource(String guid, String serviceName, Map<String, RangerPolicy.RangerPolicyResource> resourceElements, String resourceSignature, String ownerUser) {
+		this(guid, serviceName, resourceElements, resourceSignature,ownerUser, null);
 	}
 	public RangerServiceResource(String guid, String serviceName, Map<String, RangerPolicy.RangerPolicyResource> resourceElements, String resourceSignature) {
 		this(guid, serviceName, resourceElements, resourceSignature, null);
@@ -78,6 +83,10 @@ public class RangerServiceResource extends RangerBaseModelObject {
 		return ownerUser;
 	}
 
+	public Map<String, String> getAdditionalInfo() {
+		return additionalInfo;
+	}
+
 	public void setServiceName(String serviceName) {
 		this.serviceName = serviceName;
 	}
@@ -94,6 +103,10 @@ public class RangerServiceResource extends RangerBaseModelObject {
 		this.ownerUser = ownerUser;
 	}
 
+	public void setAdditionalInfo(Map<String, String> additionalInfo) {
+		this.additionalInfo = additionalInfo;
+	}
+
 	@Override
 	public String toString() {
 		StringBuilder sb = new StringBuilder();
@@ -124,6 +137,14 @@ public class RangerServiceResource extends RangerBaseModelObject {
 
 		sb.append("ownerUser={").append(ownerUser).append("} ");
 
+		sb.append("additionalInfo={");
+		if(additionalInfo != null) {
+			for(Map.Entry<String, String> e : additionalInfo.entrySet()) {
+				sb.append(e.getKey()).append("={").append(e.getValue()).append("} ");
+			}
+		}
+		sb.append("} ");
+
 		sb.append("resourceSignature={").append(resourceSignature).append("} ");
 
 		sb.append(" }");
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/StoredServiceResource.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/StoredServiceResource.java
new file mode 100644
index 0000000..644f2ce
--- /dev/null
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/StoredServiceResource.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ranger.plugin.store;
+
+import org.apache.ranger.plugin.model.RangerPolicy;
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.Map;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
+@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+
+public class StoredServiceResource implements java.io.Serializable {
+    private final Map<String, RangerPolicy.RangerPolicyResource> resourceElements;
+    private final String                            ownerName;
+    private final Map<String, String>               additionalInfo;
+
+    public StoredServiceResource() {
+        this(null, null, null);
+    }
+
+    public StoredServiceResource(Map<String, RangerPolicy.RangerPolicyResource> resourceElements, String ownerName, Map<String, String> additionalInfo) {
+        this.resourceElements = resourceElements;
+        this.ownerName        = ownerName;
+        this.additionalInfo   = additionalInfo;
+    }
+
+    public Map<String, RangerPolicy.RangerPolicyResource> getResourceElements() {
+        return resourceElements;
+    }
+    public String getOwnerName() {
+        return ownerName;
+    }
+    public Map<String, String> getAdditionalInfo() {
+        return additionalInfo;
+    }
+}
\ No newline at end of file
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXRMSServiceResourceDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXRMSServiceResourceDao.java
index 8938e6d..afa754b 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXRMSServiceResourceDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXRMSServiceResourceDao.java
@@ -19,37 +19,25 @@
 
 package org.apache.ranger.db;
 
-import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-//import java.util.stream.Collectors;
-
 import javax.persistence.NoResultException;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.ranger.authorization.utils.JsonUtils;
 import org.apache.ranger.authorization.utils.StringUtil;
 import org.apache.ranger.common.DateUtil;
 import org.apache.ranger.common.GUIDUtil;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXRMSServiceResource;
-import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerServiceResource;
+import org.apache.ranger.plugin.store.StoredServiceResource;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.springframework.stereotype.Service;
 
 @Service
 public class XXRMSServiceResourceDao extends BaseDao<XXRMSServiceResource> {
 
-	public static final Gson gsonBuilder = new GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z").create();
-	public static final Type subsumedDataType   = new TypeToken<Map<String, RangerPolicy.RangerPolicyResource>>() {}.getType();
-
 	private static RangerDaoManagerBase _daoManager = null;
 
 	public XXRMSServiceResourceDao(RangerDaoManagerBase daoManager) {
@@ -112,7 +100,7 @@ public class XXRMSServiceResourceDao extends BaseDao<XXRMSServiceResource> {
 		}
 	}
 
-	public RangerServiceResource getServiceResourceByServiceAndResourceSignature(String serviceName, String resourceSignature) throws Exception {
+	public RangerServiceResource getServiceResourceByServiceAndResourceSignature(String serviceName, String resourceSignature) {
 
 		RangerServiceResource ret = null;
 
@@ -155,10 +143,16 @@ public class XXRMSServiceResourceDao extends BaseDao<XXRMSServiceResource> {
 			ret.setServiceName(service.getName());
 
 			if (StringUtils.isNotEmpty(xxServiceResource.getServiceResourceElements())) {
-				Map<String, RangerPolicy.RangerPolicyResource> serviceResourceElements = gsonBuilder.fromJson(xxServiceResource.getServiceResourceElements(), subsumedDataType);
-				if (MapUtils.isNotEmpty(serviceResourceElements)) {
-					ret.setResourceElements(serviceResourceElements);
+				try {
+					StoredServiceResource storedServiceResource = JsonUtilsV2.jsonToObj(xxServiceResource.getServiceResourceElements(), StoredServiceResource.class);
+					ret.setResourceElements(storedServiceResource.getResourceElements());
+					ret.setOwnerUser(storedServiceResource.getOwnerName());
+					ret.setAdditionalInfo(storedServiceResource.getAdditionalInfo());
+				} catch (Exception e){
+					ret = null;
 				}
+			} else {
+				ret = null;
 			}
 		}
 
@@ -185,15 +179,16 @@ public class XXRMSServiceResourceDao extends BaseDao<XXRMSServiceResource> {
 		XXService service = daoManager.getXXService().findByName(serviceResource.getServiceName());
 
 		if (service != null) {
-
 			ret.setServiceId(service.getId());
 
-			if (MapUtils.isNotEmpty(serviceResource.getResourceElements())) {
-				String serviceResourceElements = JsonUtils.mapToJson(serviceResource.getResourceElements());
-				if (StringUtils.isNotEmpty(serviceResourceElements)) {
-					ret.setServiceResourceElements(serviceResourceElements);
-				}
+			StoredServiceResource storedServiceResource = new StoredServiceResource(serviceResource.getResourceElements(), serviceResource.getOwnerUser(), serviceResource.getAdditionalInfo());
+			try {
+				String serviceResourceString = JsonUtilsV2.objToJson(storedServiceResource);
+				ret.setServiceResourceElements(serviceResourceString);
+			} catch (Exception e) {
+				ret = null;
 			}
+
 		} else {
 			ret = null;
 		}