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