Repository: incubator-ranger Updated Branches: refs/heads/tag-policy dba2bea65 -> bc090a669
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/entity/XXTagResourceMap.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXTagResourceMap.java b/security-admin/src/main/java/org/apache/ranger/entity/XXTagResourceMap.java new file mode 100644 index 0000000..953df6b --- /dev/null +++ b/security-admin/src/main/java/org/apache/ranger/entity/XXTagResourceMap.java @@ -0,0 +1,195 @@ +/* + * 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.entity; + +import java.io.Serializable; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.ranger.common.AppConstants; + +@Entity +@Cacheable +@Table(name="x_tag_resource_map") +@XmlRootElement +public class XXTagResourceMap extends XXDBBase implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + @SequenceGenerator(name = "XXTagResourceMapSEQ", sequenceName = "XXTagResourceMapSEQ", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.AUTO, generator = "XXTagResourceMapSEQ") + @Column(name = "id") + protected Long id; + + @Column(name = "guid", unique = true, nullable = false, length = 512) + protected String guid; + + @Column(name = "tag_id") + protected Long tagId; + + @Column(name = "tagged_res_id") + protected Long taggedResId; + + @Override + public void setId(Long id) { + this.id = id; + } + + @Override + public Long getId() { + return id; + } + + /** + * @return the guid + */ + public String getGuid() { + return guid; + } + + /** + * @param guid + * the guid to set + */ + public void setGuid(String guid) { + this.guid = guid; + } + + /** + * @return the tagId + */ + public Long getTagId() { + return tagId; + } + + /** + * @param tagId + * the tagId to set + */ + public void setTagId(Long tagId) { + this.tagId = tagId; + } + + /** + * @return the taggedResId + */ + public Long getTaggedResId() { + return taggedResId; + } + + /** + * @param taggedResId + * the taggedResId to set + */ + public void setTaggedResId(Long taggedResId) { + this.taggedResId = taggedResId; + } + + @Override + public int getMyClassType() { + return AppConstants.CLASS_TYPE_XA_TAG_RESOURCE_MAP; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((guid == null) ? 0 : guid.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((tagId == null) ? 0 : tagId.hashCode()); + result = prime * result + ((taggedResId == null) ? 0 : taggedResId.hashCode()); + return result; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + XXTagResourceMap other = (XXTagResourceMap) obj; + if (guid == null) { + if (other.guid != null) + return false; + } else if (!guid.equals(other.guid)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (tagId == null) { + if (other.tagId != null) + return false; + } else if (!tagId.equals(other.tagId)) + return false; + if (taggedResId == null) { + if (other.taggedResId != null) + return false; + } else if (!taggedResId.equals(other.taggedResId)) + return false; + return true; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + toString(sb); + return sb.toString(); + } + + public StringBuilder toString(StringBuilder sb) { + sb.append("{ "); + sb.append(super.toString() + "} "); + sb.append("id={").append(id).append("} "); + sb.append("guid={").append(guid).append("} "); + sb.append("tagId={").append(tagId).append("} "); + sb.append("taggedResId={").append(taggedResId).append("} "); + sb.append(" }"); + + return sb; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResource.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResource.java b/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResource.java new file mode 100644 index 0000000..9487bc7 --- /dev/null +++ b/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResource.java @@ -0,0 +1,245 @@ +/* + * 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.entity; + +import java.io.Serializable; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.ranger.common.AppConstants; + +@Entity +@Cacheable +@Table(name="x_tagged_resource") +@XmlRootElement +public class XXTaggedResource extends XXDBBase implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + @SequenceGenerator(name = "XXTaggedResourceSEQ", sequenceName = "XXTaggedResourceSEQ", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.AUTO, generator = "XXTaggedResourceSEQ") + @Column(name = "id") + protected Long id; + + @Column(name = "guid", unique = true, nullable = false, length = 512) + protected String guid; + + @Column(name = "version") + protected Long version; + + @Column(name = "is_enabled") + protected Boolean isEnabled; + + @Column(name = "external_id") + protected String externalId; + + @Column(name = "service_id") + protected Long serviceId; + + @Override + public void setId(Long id) { + this.id = id; + } + + @Override + public Long getId() { + return id; + } + + /** + * @return the guid + */ + public String getGuid() { + return guid; + } + + /** + * @param guid + * the guid to set + */ + public void setGuid(String guid) { + this.guid = guid; + } + + /** + * @return the serviceId + */ + public Long getServiceId() { + return serviceId; + } + + /** + * @param serviceId + * the serviceId to set + */ + public void setServiceId(Long serviceId) { + this.serviceId = serviceId; + } + + /** + * @return the externalId + */ + public String getExternalId() { + return externalId; + } + + /** + * @param externalId + * the externalId to set + */ + public void setExternalId(String externalId) { + this.externalId = externalId; + } + + /** + * @return the version + */ + public Long getVersion() { + return version; + } + + /** + * @param version + * the version to set + */ + public void setVersion(Long version) { + this.version = version; + } + + /** + * @return the isEnabled + */ + public Boolean getIsEnabled() { + return isEnabled; + } + + /** + * @param isEnabled + * the isEnabled to set + */ + public void setIsEnabled(Boolean isEnabled) { + this.isEnabled = isEnabled; + } + + @Override + public int getMyClassType() { + return AppConstants.CLASS_TYPE_XA_TAGGED_RESOURCE; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((externalId == null) ? 0 : externalId.hashCode()); + result = prime * result + ((guid == null) ? 0 : guid.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((isEnabled == null) ? 0 : isEnabled.hashCode()); + result = prime * result + ((serviceId == null) ? 0 : serviceId.hashCode()); + result = prime * result + ((version == null) ? 0 : version.hashCode()); + return result; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + XXTaggedResource other = (XXTaggedResource) obj; + if (externalId == null) { + if (other.externalId != null) + return false; + } else if (!externalId.equals(other.externalId)) + return false; + if (guid == null) { + if (other.guid != null) + return false; + } else if (!guid.equals(other.guid)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (isEnabled == null) { + if (other.isEnabled != null) + return false; + } else if (!isEnabled.equals(other.isEnabled)) + return false; + if (serviceId == null) { + if (other.serviceId != null) + return false; + } else if (!serviceId.equals(other.serviceId)) + return false; + if (version == null) { + if (other.version != null) + return false; + } else if (!version.equals(other.version)) + return false; + return true; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + toString(sb); + return sb.toString(); + } + + public StringBuilder toString(StringBuilder sb) { + sb.append("{ "); + sb.append(super.toString() + "} "); + sb.append("id={").append(id).append("} "); + sb.append("guid={").append(guid).append("} "); + sb.append("version={").append(version).append("} "); + sb.append("isEnabled={").append(isEnabled).append("} "); + sb.append("externalId={").append(externalId).append("} "); + sb.append("serviceId={").append(serviceId).append("} "); + sb.append(" }"); + + return sb; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResourceValue.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResourceValue.java b/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResourceValue.java new file mode 100644 index 0000000..977d1f5 --- /dev/null +++ b/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResourceValue.java @@ -0,0 +1,245 @@ +/* + * 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.entity; + +import java.io.Serializable; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.ranger.common.AppConstants; + +@Entity +@Cacheable +@Table(name="x_tagged_resource_value") +@XmlRootElement +public class XXTaggedResourceValue extends XXDBBase implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + @SequenceGenerator(name = "XXTaggedResourceValueSEQ", sequenceName = "XXTaggedResourceValueSEQ", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.AUTO, generator = "XXTaggedResourceValueSEQ") + @Column(name = "id") + protected Long id; + + @Column(name = "guid", unique = true, nullable = false, length = 512) + protected String guid; + + @Column(name = "res_def_id") + protected Long resDefId; + + @Column(name = "tagged_res_id") + protected Long taggedResourceId; + + @Column(name = "is_excludes") + protected Boolean isExcludes; + + @Column(name = "is_recursive") + protected Boolean isRecursive; + + @Override + public void setId(Long id) { + this.id = id; + } + + @Override + public Long getId() { + return id; + } + + /** + * @return the guid + */ + public String getGuid() { + return guid; + } + + /** + * @param guid + * the guid to set + */ + public void setGuid(String guid) { + this.guid = guid; + } + + /** + * @return the resDefId + */ + public Long getResDefId() { + return resDefId; + } + + /** + * @param resDefId + * the resDefId to set + */ + public void setResDefId(Long resDefId) { + this.resDefId = resDefId; + } + + /** + * @return the isExcludes + */ + public Boolean getIsExcludes() { + return isExcludes; + } + + /** + * @param isExcludes + * the isExcludes to set + */ + public void setIsExcludes(Boolean isExcludes) { + this.isExcludes = isExcludes; + } + + /** + * @return the isRecursive + */ + public Boolean getIsRecursive() { + return isRecursive; + } + + /** + * @param isRecursive + * the isRecursive to set + */ + public void setIsRecursive(Boolean isRecursive) { + this.isRecursive = isRecursive; + } + + /** + * @return the taggedResourceId + */ + public Long getTaggedResourceId() { + return taggedResourceId; + } + + /** + * @param taggedResourceId + * the taggedResourceId to set + */ + public void setTaggedResourceId(Long taggedResourceId) { + this.taggedResourceId = taggedResourceId; + } + + @Override + public int getMyClassType() { + return AppConstants.CLASS_TYPE_XA_TAGGED_RESOURCE_VALUE; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((guid == null) ? 0 : guid.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((isExcludes == null) ? 0 : isExcludes.hashCode()); + result = prime * result + ((isRecursive == null) ? 0 : isRecursive.hashCode()); + result = prime * result + ((resDefId == null) ? 0 : resDefId.hashCode()); + result = prime * result + ((taggedResourceId == null) ? 0 : taggedResourceId.hashCode()); + return result; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + XXTaggedResourceValue other = (XXTaggedResourceValue) obj; + if (guid == null) { + if (other.guid != null) + return false; + } else if (!guid.equals(other.guid)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (isExcludes == null) { + if (other.isExcludes != null) + return false; + } else if (!isExcludes.equals(other.isExcludes)) + return false; + if (isRecursive == null) { + if (other.isRecursive != null) + return false; + } else if (!isRecursive.equals(other.isRecursive)) + return false; + if (resDefId == null) { + if (other.resDefId != null) + return false; + } else if (!resDefId.equals(other.resDefId)) + return false; + if (taggedResourceId == null) { + if (other.taggedResourceId != null) + return false; + } else if (!taggedResourceId.equals(other.taggedResourceId)) + return false; + return true; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + toString(sb); + return sb.toString(); + } + + public StringBuilder toString(StringBuilder sb) { + sb.append("{ "); + sb.append(super.toString() + "} "); + sb.append("id={").append(id).append("} "); + sb.append("guid={").append(guid).append("} "); + sb.append("resDefId={").append(resDefId).append("} "); + sb.append("taggedResourceId={").append(taggedResourceId).append("} "); + sb.append("isExcludes={").append(isExcludes).append("} "); + sb.append("isRecursive={").append(isRecursive).append("} "); + sb.append(" }"); + + return sb; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResourceValueMap.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResourceValueMap.java b/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResourceValueMap.java new file mode 100644 index 0000000..62e875f --- /dev/null +++ b/security-admin/src/main/java/org/apache/ranger/entity/XXTaggedResourceValueMap.java @@ -0,0 +1,220 @@ +/* + * 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.entity; + +import java.io.Serializable; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.ranger.common.AppConstants; + +@Entity +@Cacheable +@Table(name="x_tagged_resource_value_map") +@XmlRootElement +public class XXTaggedResourceValueMap extends XXDBBase implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + @SequenceGenerator(name = "XXTaggedResourceValueMapSEQ", sequenceName = "XXTaggedResourceValueMapSEQ", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.AUTO, generator = "XXTaggedResourceValueMapSEQ") + @Column(name = "id") + protected Long id; + + @Column(name = "guid", unique = true, nullable = false, length = 512) + protected String guid; + + @Column(name = "res_value_id") + protected Long resValueId; + + @Column(name = "value") + protected String value; + + @Column(name = "sort_order") + protected Integer sortOrder; + + @Override + public void setId(Long id) { + this.id = id; + } + + @Override + public Long getId() { + return id; + } + + /** + * @return the guid + */ + public String getGuid() { + return guid; + } + + /** + * @param guid + * the guid to set + */ + public void setGuid(String guid) { + this.guid = guid; + } + + /** + * @return the resValueId + */ + public Long getResValueId() { + return resValueId; + } + + /** + * @param resValueId + * the resValueId to set + */ + public void setResValueId(Long resValueId) { + this.resValueId = resValueId; + } + + /** + * @return the value + */ + public String getValue() { + return value; + } + + /** + * @param value + * the value to set + */ + public void setValue(String value) { + this.value = value; + } + + /** + * @return the sortOrder + */ + public Integer getSortOrder() { + return sortOrder; + } + + /** + * @param sortOrder + * the sortOrder to set + */ + public void setSortOrder(Integer sortOrder) { + this.sortOrder = sortOrder; + } + + @Override + public int getMyClassType() { + return AppConstants.CLASS_TYPE_XA_TAGGED_RESOURCE_VALUE_MAP; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((guid == null) ? 0 : guid.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((resValueId == null) ? 0 : resValueId.hashCode()); + result = prime * result + ((sortOrder == null) ? 0 : sortOrder.hashCode()); + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + XXTaggedResourceValueMap other = (XXTaggedResourceValueMap) obj; + if (guid == null) { + if (other.guid != null) + return false; + } else if (!guid.equals(other.guid)) + return false; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (resValueId == null) { + if (other.resValueId != null) + return false; + } else if (!resValueId.equals(other.resValueId)) + return false; + if (sortOrder == null) { + if (other.sortOrder != null) + return false; + } else if (!sortOrder.equals(other.sortOrder)) + return false; + if (value == null) { + if (other.value != null) + return false; + } else if (!value.equals(other.value)) + return false; + return true; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + toString(sb); + return sb.toString(); + } + + public StringBuilder toString(StringBuilder sb) { + sb.append("{ "); + sb.append(super.toString() + "} "); + sb.append("id={").append(id).append("} "); + sb.append("guid={").append(guid).append("} "); + sb.append("resValueId={").append(resValueId).append("} "); + sb.append("value={").append(value).append("} "); + sb.append("sortOrder={").append(sortOrder).append("} "); + sb.append(" }"); + + return sb; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java index 3f2062a..0837290 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java @@ -23,6 +23,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ranger.biz.ServiceDBStore; +import org.apache.ranger.biz.TagDBStore; import org.apache.ranger.common.RESTErrorUtil; import org.apache.ranger.plugin.model.RangerTaggedResourceKey; import org.apache.ranger.plugin.model.RangerTaggedResource; @@ -53,32 +54,22 @@ public class TagREST { private static final Log LOG = LogFactory.getLog(TagREST.class); - @Autowired - RESTErrorUtil restErrorUtil; + @Autowired + RESTErrorUtil restErrorUtil; - /* - @Autowired - ServiceRESTStore svcStore; - */ + @Autowired + ServiceDBStore svcStore; - @Autowired - ServiceDBStore svcStore; + @Autowired + TagDBStore tagStore; - /* - @Autowired - TagFileStore tagStore; - */ + public TagREST() { + } - private TagStore tagStore; + @PostConstruct + public void initStore() { - public TagREST() { - } - - @PostConstruct - public void initStore() { - tagStore = TagFileStore.getInstance(); - tagStore.setServiceStore(svcStore); - } + } @POST @Path(TagRESTConstants.TAGS_RESOURCE) http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java index cab208b..7223f10 100644 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java @@ -17,12 +17,14 @@ package org.apache.ranger.service; +import org.apache.ranger.common.ContextUtil; +import org.apache.ranger.common.DateUtil; import org.apache.ranger.entity.XXDBBase; import org.springframework.stereotype.Component; @Component public class RangerAuditFields<T extends XXDBBase> { - + public T populateAuditFields(T xObj, T parentObj) { xObj.setCreateTime(parentObj.getCreateTime()); xObj.setUpdateTime(parentObj.getUpdateTime()); @@ -31,4 +33,12 @@ public class RangerAuditFields<T extends XXDBBase> { return xObj; } + public T populateAuditFieldsForCreate(T xObj) { + xObj.setCreateTime(DateUtil.getUTCDate()); + xObj.setUpdateTime(DateUtil.getUTCDate()); + xObj.setAddedByUserId(ContextUtil.getCurrentUserId()); + xObj.setUpdatedByUserId(ContextUtil.getCurrentUserId()); + return xObj; + } + } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java new file mode 100644 index 0000000..25fc278 --- /dev/null +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java @@ -0,0 +1,39 @@ +/* + * 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.service; + +import org.apache.ranger.entity.XXTagDef; +import org.apache.ranger.plugin.model.RangerTagDef; +import org.springframework.stereotype.Service; + +@Service +public class RangerTagDefService extends RangerTagDefServiceBase<XXTagDef, RangerTagDef> { + + @Override + protected void validateForCreate(RangerTagDef vObj) { + + } + + @Override + protected void validateForUpdate(RangerTagDef vObj, XXTagDef entityObj) { + + } + +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java new file mode 100644 index 0000000..8b2d8a9 --- /dev/null +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java @@ -0,0 +1,115 @@ +/* + * 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.service; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.ranger.common.GUIDUtil; +import org.apache.ranger.entity.XXDBBase; +import org.apache.ranger.entity.XXTagAttributeDef; +import org.apache.ranger.entity.XXTagDef; +import org.apache.ranger.plugin.model.RangerTagDef; +import org.apache.ranger.plugin.model.RangerTagDef.RangerTagAttributeDef; +import org.springframework.beans.factory.annotation.Autowired; + +public abstract class RangerTagDefServiceBase<T extends XXTagDef, V extends RangerTagDef> extends + RangerBaseModelService<T, V> { + + @Autowired + GUIDUtil guidUtil; + + @Autowired + RangerAuditFields<XXDBBase> rangerAuditFields; + + @Override + @SuppressWarnings("unchecked") + protected XXTagDef mapViewToEntityBean(RangerTagDef vObj, XXTagDef xObj, int OPERATION_CONTEXT) { + String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid(); + + xObj.setGuid(guid); + xObj.setVersion(vObj.getVersion()); + xObj.setIsEnabled(vObj.getIsEnabled()); + xObj.setName(vObj.getName()); + xObj.setSource(vObj.getSource()); + return xObj; + } + + @Override + @SuppressWarnings("unchecked") + protected RangerTagDef mapEntityToViewBean(RangerTagDef vObj, XXTagDef xObj) { + + vObj.setGuid(xObj.getGuid()); + vObj.setVersion(xObj.getVersion()); + vObj.setIsEnabled(xObj.getIsEnabled()); + vObj.setName(xObj.getName()); + vObj.setSource(xObj.getSource()); + + List<RangerTagAttributeDef> attributeDefs = getAttributeDefForTagDef(xObj); + vObj.setAttributeDefs(attributeDefs); + + return vObj; + } + + public List<RangerTagAttributeDef> getAttributeDefForTagDef(XXTagDef xtagDef) { + List<XXTagAttributeDef> tagAttrDefList = daoMgr.getXXTagAttributeDef().findByTagDefId(xtagDef.getId()); + List<RangerTagDef.RangerTagAttributeDef> attributeDefList = new ArrayList<RangerTagDef.RangerTagAttributeDef>(); + + for (XXTagAttributeDef xAttrTag : tagAttrDefList) { + RangerTagAttributeDef attrDef = populateRangerTagAttributeDef(xAttrTag); + attributeDefList.add(attrDef); + } + return attributeDefList; + } + + /** + * @param xObj + * @return + */ + public RangerTagAttributeDef populateRangerTagAttributeDef(XXTagAttributeDef xObj) { + RangerTagAttributeDef attrDef = new RangerTagAttributeDef(); + attrDef.setName(xObj.getName()); + attrDef.setType(xObj.getType()); + return attrDef; + } + + /** + * @param attrDef + * @param xTagAttrDef + * @param parentObj + * @return + */ + public XXTagAttributeDef populateXXTagAttributeDef(RangerTagAttributeDef attrDef, XXTagAttributeDef xTagAttrDef, + XXTagDef parentObj) { + + if (xTagAttrDef == null) { + xTagAttrDef = new XXTagAttributeDef(); + xTagAttrDef.setGuid(guidUtil.genGUID()); + } + + xTagAttrDef = (XXTagAttributeDef) rangerAuditFields.populateAuditFields(xTagAttrDef, parentObj); + + xTagAttrDef.setTagDefId(parentObj.getId()); + xTagAttrDef.setName(attrDef.getName()); + xTagAttrDef.setType(attrDef.getType()); + return xTagAttrDef; + } +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java new file mode 100644 index 0000000..67efcad --- /dev/null +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java @@ -0,0 +1,43 @@ +/* + * 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.service; + +import org.apache.ranger.entity.XXTaggedResource; +import org.apache.ranger.plugin.model.RangerTaggedResource; +import org.springframework.stereotype.Service; + +@Service +public class RangerTaggedResourceService extends RangerTaggedResourceServiceBase<XXTaggedResource, RangerTaggedResource> { + + @Override + protected void validateForCreate(RangerTaggedResource vObj) { + + } + + @Override + protected void validateForUpdate(RangerTaggedResource vObj, XXTaggedResource entityObj) { + + } + + public RangerTaggedResource getPopulatedViewObjject(XXTaggedResource xObj) { + return populateViewBean(xObj); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java new file mode 100644 index 0000000..c50c1fd --- /dev/null +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java @@ -0,0 +1,147 @@ +/* + * 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.service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.apache.ranger.common.GUIDUtil; +import org.apache.ranger.common.MessageEnums; +import org.apache.ranger.entity.XXResourceDef; +import org.apache.ranger.entity.XXService; +import org.apache.ranger.entity.XXTag; +import org.apache.ranger.entity.XXTagAttribute; +import org.apache.ranger.entity.XXTaggedResource; +import org.apache.ranger.entity.XXTaggedResourceValue; +import org.apache.ranger.plugin.model.RangerPolicy; +import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource; +import org.apache.ranger.plugin.model.RangerTaggedResource; +import org.apache.ranger.plugin.model.RangerTaggedResourceKey; +import org.apache.ranger.plugin.model.RangerTaggedResource.RangerResourceTag; +import org.springframework.beans.factory.annotation.Autowired; + +public abstract class RangerTaggedResourceServiceBase<T extends XXTaggedResource, V extends RangerTaggedResource> extends RangerBaseModelService<T, V> { + + @Autowired + GUIDUtil guidUtil; + + @Override + @SuppressWarnings("unchecked") + protected XXTaggedResource mapViewToEntityBean(RangerTaggedResource vObj, XXTaggedResource xObj, int operationContext) { + String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid(); + + xObj.setGuid(guid); + xObj.setVersion(vObj.getVersion()); + xObj.setIsEnabled(vObj.getIsEnabled()); + xObj.setExternalId(vObj.getExternalId()); + + RangerTaggedResourceKey key = vObj.getKey(); + if (key == null) { + throw restErrorUtil.createRESTException("Error Populating XXTaggedResource. Key cannot be null in RangerTaggedResource.", MessageEnums.INVALID_INPUT_DATA); + } + XXService xService = daoMgr.getXXService().findByName(key.getServiceName()); + if (xService == null) { + throw restErrorUtil.createRESTException("Error Populating XXTaggedResource. No Service found with name: " + key.getServiceName(), MessageEnums.INVALID_INPUT_DATA); + } + + xObj.setServiceId(xService.getId()); + + return xObj; + } + + @Override + @SuppressWarnings("unchecked") + protected RangerTaggedResource mapEntityToViewBean(RangerTaggedResource vObj, XXTaggedResource xObj) { + vObj.setGuid(xObj.getGuid()); + vObj.setVersion(xObj.getVersion()); + vObj.setIsEnabled(xObj.getIsEnabled()); + vObj.setExternalId(xObj.getExternalId()); + + RangerTaggedResourceKey key = populateRangerTaggedResourceKey(xObj); + vObj.setKey(key); + + List<RangerResourceTag> tags = populateRangerResourceTags(xObj); + vObj.setTags(tags); + + return vObj; + } + + private List<RangerResourceTag> populateRangerResourceTags(XXTaggedResource xTaggedRes) { + if (xTaggedRes == null) { + return null; + } + + List<RangerResourceTag> tags = new ArrayList<RangerTaggedResource.RangerResourceTag>(); + + List<XXTag> xTagList = daoMgr.getXXTag().findByTaggedResource(xTaggedRes.getId()); + + for (XXTag xTag : xTagList) { + RangerResourceTag tag = new RangerResourceTag(); + + List<XXTagAttribute> tagAttrList = daoMgr.getXXTagAttribute().findByTagId(xTag.getId()); + Map<String, String> attrList = new HashMap<String, String>(); + + for (XXTagAttribute tagAttr : tagAttrList) { + attrList.put(tagAttr.getName(), tagAttr.getValue()); + } + + tag.setAttributeValues(attrList); + tag.setName(xTag.getName()); + tag.setExternalId(xTag.getExternalId()); + + tags.add(tag); + } + + return tags; + } + + private RangerTaggedResourceKey populateRangerTaggedResourceKey(XXTaggedResource xTaggedRes) { + if (xTaggedRes == null) { + return null; + } + + RangerTaggedResourceKey key = new RangerTaggedResourceKey(); + + XXService xService = daoMgr.getXXService().getById(xTaggedRes.getServiceId()); + key.setServiceName(xService.getName()); + + List<XXTaggedResourceValue> resValueList = daoMgr.getXXTaggedResourceValue().findByTaggedResId(xTaggedRes.getId()); + Map<String, RangerPolicy.RangerPolicyResource> resourceSpec = new HashMap<String, RangerPolicy.RangerPolicyResource>(); + + for (XXTaggedResourceValue resValue : resValueList) { + List<String> resValueMapList = daoMgr.getXXTaggedResourceValueMap().findValuesByResValueId(resValue.getId()); + + XXResourceDef xResDef = daoMgr.getXXResourceDef().getById(resValue.getResDefId()); + + RangerPolicyResource policyRes = new RangerPolicyResource(); + policyRes.setIsExcludes(resValue.getIsExcludes()); + policyRes.setIsRecursive(resValue.getIsRecursive()); + policyRes.setValues(resValueMapList); + + resourceSpec.put(xResDef.getName(), policyRes); + } + key.setResourceSpec(resourceSpec); + return key; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/bc090a66/security-admin/src/main/resources/META-INF/jpa_named_queries.xml ---------------------------------------------------------------------- diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml index aa504e7..090b70c 100644 --- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml +++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml @@ -532,4 +532,51 @@ xpu.id=:userId and gmp.isAllowed=:isAllowed </query> </named-query> + + <!-- Start ==> JPA Queries for Tag Based Policies --> + + <named-query name="XXTagAttributeDef.findByTagDefId"> + <query>select obj from XXTagAttributeDef obj where obj.tagDefId = :tagDefId</query> + </named-query> + + <named-query name="XXTaggedResourceValue.findByTaggedResId"> + <query>select obj from XXTaggedResourceValue obj where obj.taggedResourceId = :taggedResId</query> + </named-query> + + <named-query name="XXTaggedResourceValueMap.findByResValueId"> + <query>select obj from XXTaggedResourceValueMap obj where obj.resValueId = :resValueId</query> + </named-query> + + <named-query name="XXTaggedResourceValueMap.findValuesByResValueId"> + <query>select obj.value from XXTaggedResourceValueMap obj where obj.resValueId = :resValueId</query> + </named-query> + + <named-query name="XXTag.findByTaggedResource"> + <query>select obj from XXTag obj, XXTagResourceMap tagResMap where + tagResMap.taggedResId = :taggedResId and obj.id = tagResMap.tagId</query> + </named-query> + + <named-query name="XXTagAttribute.findByTagId"> + <query>select obj from XXTagAttribute obj where obj.tagId = :tagId</query> + </named-query> + + <named-query name="XXTaggedResource.findByServiceId"> + <query>select obj from XXTaggedResource obj where obj.serviceId = :serviceId</query> + </named-query> + + <named-query name="XXTag.findTagNamesByServiceId"> + <query>select obj.name from XXTag obj, XXTaggedResource tRes, XXTagResourceMap tResMap where + tRes.serviceId = :serviceId and obj.id = tResMap.tagId and tRes.id = tResMap.taggedResId </query> + </named-query> + + <named-query name="XXTagResourceMap.findByTaggedResourceId"> + <query>select obj from XXTagResourceMap obj where obj.taggedResId = :taggedResId</query> + </named-query> + + <named-query name="XXTag.findTagsByExternalId"> + <query>select obj from XXTag obj where obj.externalId = :externalId</query> + </named-query> + + <!-- End <== JPA Queries for Tag Based Policies --> + </entity-mappings>
