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;
}