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

abhay 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 298f362  RANGER-3065: RangerServiceResource model object needs to be 
enhanced to store/track any additional information about the resource
298f362 is described below

commit 298f362f640fd98aba38b693bb7d8a786074af22
Author: Abhay Kulkarni <[email protected]>
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;
                }

Reply via email to