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

alexoree pushed a commit to branch feature/JUDDI-558
in repository https://gitbox.apache.org/repos/asf/juddi.git


The following commit(s) were added to refs/heads/feature/JUDDI-558 by this push:
     new 4c90588  JUDDI-558 amother interface change to better handling the 
filtering of publisher assertions
4c90588 is described below

commit 4c90588d54defbb0cdaf7faf5abd5dac6754fe11
Author: Alex O'Ree <[email protected]>
AuthorDate: Wed Jun 26 17:42:40 2019 -0400

    JUDDI-558 amother interface change to better handling the filtering of 
publisher assertions
---
 .../org/apache/juddi/api/impl/UDDIInquiryImpl.java |   9 +-
 .../juddi/security/AllowAllAccessControlImpl.java  |   5 +-
 .../org/apache/juddi/security/IAccessControl.java  |   3 +-
 .../security/rbac/RoleBasedAccessControlImpl.java  | 106 ++++++++++++++++++++-
 4 files changed, 114 insertions(+), 9 deletions(-)

diff --git 
a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java 
b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
index 9cd0531..d2dbfa1 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
@@ -52,6 +52,7 @@ import org.uddi.api_v3.GetOperationalInfo;
 import org.uddi.api_v3.GetServiceDetail;
 import org.uddi.api_v3.GetTModelDetail;
 import org.uddi.api_v3.OperationalInfos;
+import org.uddi.api_v3.RelatedBusinessInfos;
 import org.uddi.api_v3.RelatedBusinessesList;
 import org.uddi.api_v3.ServiceDetail;
 import org.uddi.api_v3.ServiceList;
@@ -277,13 +278,13 @@ public class UDDIInquiryImpl extends AuthenticatedService 
implements UDDIInquiry
                         long procTime = System.currentTimeMillis() - startTime;
                         
serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.SUCCESS, 
procTime);                      
                         
-                            List<org.uddi.api_v3.RelatedBusinessInfo> 
FilterBindingTemplates = 
+                           RelatedBusinessInfos FilterBindingTemplates = 
                                     
AccessControlFactory.getAccessControlInstance().filtedRelatedBusinessInfos(
                                                this.ctx,
                                             entityPublisher,
-                                            
result.getRelatedBusinessInfos().getRelatedBusinessInfo());
-                            
result.getRelatedBusinessInfos().getRelatedBusinessInfo().clear();
-                            
result.getRelatedBusinessInfos().getRelatedBusinessInfo().addAll(FilterBindingTemplates);
+                                            result.getRelatedBusinessInfos());
+                            
result.setRelatedBusinessInfos(FilterBindingTemplates);
+                           
                         
                        return result;
                } finally {
diff --git 
a/juddi-core/src/main/java/org/apache/juddi/security/AllowAllAccessControlImpl.java
 
b/juddi-core/src/main/java/org/apache/juddi/security/AllowAllAccessControlImpl.java
index 9891a44..3363e8a 100644
--- 
a/juddi-core/src/main/java/org/apache/juddi/security/AllowAllAccessControlImpl.java
+++ 
b/juddi-core/src/main/java/org/apache/juddi/security/AllowAllAccessControlImpl.java
@@ -32,6 +32,7 @@ import org.uddi.api_v3.BusinessInfo;
 import org.uddi.api_v3.BusinessService;
 import org.uddi.api_v3.OperationalInfo;
 import org.uddi.api_v3.RelatedBusinessInfo;
+import org.uddi.api_v3.RelatedBusinessInfos;
 import org.uddi.api_v3.ServiceInfo;
 import org.uddi.api_v3.TModel;
 import org.uddi.api_v3.TModelInfo;
@@ -71,8 +72,8 @@ public class AllowAllAccessControlImpl implements 
IAccessControl {
     }
 
     @Override
-    public List<RelatedBusinessInfo> 
filtedRelatedBusinessInfos(WebServiceContext arg0, UddiEntityPublisher user, 
List<RelatedBusinessInfo> arg2) {
-        return new ArrayList<>(arg2);
+    public RelatedBusinessInfos filtedRelatedBusinessInfos(WebServiceContext 
arg0, UddiEntityPublisher user, RelatedBusinessInfos arg1) {
+        return (arg1);
     }
 
     @Override
diff --git 
a/juddi-core/src/main/java/org/apache/juddi/security/IAccessControl.java 
b/juddi-core/src/main/java/org/apache/juddi/security/IAccessControl.java
index e41cdad..588c67c 100644
--- a/juddi-core/src/main/java/org/apache/juddi/security/IAccessControl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/security/IAccessControl.java
@@ -30,6 +30,7 @@ import org.uddi.api_v3.BusinessInfo;
 import org.uddi.api_v3.BusinessService;
 import org.uddi.api_v3.OperationalInfo;
 import org.uddi.api_v3.RelatedBusinessInfo;
+import org.uddi.api_v3.RelatedBusinessInfos;
 import org.uddi.api_v3.ServiceInfo;
 import org.uddi.api_v3.TModel;
 import org.uddi.api_v3.TModelInfo;
@@ -55,7 +56,7 @@ public interface IAccessControl {
 
     public List<BindingTemplate> filterBindingTemplates(WebServiceContext ctx, 
UddiEntityPublisher username, List<BindingTemplate> bindings);
 
-    public List<RelatedBusinessInfo> 
filtedRelatedBusinessInfos(WebServiceContext ctx, UddiEntityPublisher username, 
List<RelatedBusinessInfo> bindings);
+    public RelatedBusinessInfos filtedRelatedBusinessInfos(WebServiceContext 
ctx, UddiEntityPublisher username,  RelatedBusinessInfos bindings);
 
     public List<ServiceInfo> filterServiceInfo(WebServiceContext ctx, 
UddiEntityPublisher authorizedName, List<ServiceInfo> serviceInfo);
 
diff --git 
a/juddi-core/src/main/java/org/apache/juddi/security/rbac/RoleBasedAccessControlImpl.java
 
b/juddi-core/src/main/java/org/apache/juddi/security/rbac/RoleBasedAccessControlImpl.java
index 99f2ba5..d813834 100644
--- 
a/juddi-core/src/main/java/org/apache/juddi/security/rbac/RoleBasedAccessControlImpl.java
+++ 
b/juddi-core/src/main/java/org/apache/juddi/security/rbac/RoleBasedAccessControlImpl.java
@@ -43,8 +43,11 @@ import org.uddi.api_v3.BusinessInfo;
 import org.uddi.api_v3.BusinessService;
 import org.uddi.api_v3.Name;
 import org.uddi.api_v3.OperationalInfo;
+import org.uddi.api_v3.PublisherAssertion;
 import org.uddi.api_v3.RelatedBusinessInfo;
+import org.uddi.api_v3.RelatedBusinessInfos;
 import org.uddi.api_v3.ServiceInfo;
+import org.uddi.api_v3.SharedRelationships;
 import org.uddi.api_v3.TModel;
 import org.uddi.api_v3.TModelInfo;
 import org.uddi.v3_service.DispositionReportFaultMessage;
@@ -338,9 +341,100 @@ public class RoleBasedAccessControlImpl implements 
IAccessControl {
     }
 
     @Override
-    public List<RelatedBusinessInfo> 
filtedRelatedBusinessInfos(WebServiceContext ctx, UddiEntityPublisher username, 
List<RelatedBusinessInfo> items) {
+    public RelatedBusinessInfos filtedRelatedBusinessInfos(WebServiceContext 
ctx, UddiEntityPublisher username, RelatedBusinessInfos items) {
         //TODO
-        return new ArrayList(items);
+        if (items == null) {
+            return null;
+        }
+        for (RelatedBusinessInfo bs : items.getRelatedBusinessInfo()) {
+            UddiEntity ue = loadEntity(bs.getBusinessKey(), 
org.apache.juddi.model.BusinessService.class);
+            if (ue == null) {
+                redact(bs);
+                continue;   //access denied
+            }
+            if (username == null) {
+                redact(bs);
+                continue;   //access denied
+
+            }
+            if (username.isOwner(ue)) {
+                //keep it
+                continue;
+            }
+
+            List<RbacRulesModel> rules = getPermissionSet(bs.getBusinessKey());
+            if (rules.isEmpty()) {
+                redact(bs);
+                continue;   //access denied
+            }
+            if (!hasReadAccess(ctx, rules)) {
+                redact(bs); //also access denied, either no matching role or 
an explicit deny
+                continue;
+            }
+            if (bs.getSharedRelationships() != null) {
+
+                for (SharedRelationships si : bs.getSharedRelationships()) {
+                    boolean redact = false;
+                    for (PublisherAssertion pa : si.getPublisherAssertion()) {
+                        UddiEntity ue2 = loadEntity(pa.getFromKey(), 
org.apache.juddi.model.BusinessEntity.class);
+                        if (ue2 == null) {
+                            redact = true;
+                            break;
+                        }
+                        if (username == null) {
+                            redact = true;
+                            break;   //access denied
+
+                        }
+                        if (username.isOwner(ue)) {
+                            //keep it
+                            continue;
+                        }
+
+                        List<RbacRulesModel> rules2 = 
getPermissionSet(pa.getFromKey());
+
+                        if (rules2.isEmpty()) {
+                            redact = true;
+                            break;  //access denied
+                        }
+                        if (!hasReadAccess(ctx, rules)) {
+                            redact = true; //also access denied, either no 
matching role or an explicit deny
+                            break;
+                        }
+
+                        ue2 = loadEntity(pa.getToKey(), 
org.apache.juddi.model.BusinessEntity.class);
+                        if (ue2 == null) {
+                            redact = true;
+                            break;
+                        }
+                        
+                        if (username.isOwner(ue2)) {
+                            //keep it
+                            continue;
+                        }
+
+                        rules2 = getPermissionSet(pa.getToKey());
+
+                        if (rules2.isEmpty()) {
+                            redact = true;
+                            break; //access denied
+                        }
+                        if (!hasReadAccess(ctx, rules)) {
+                            redact = true; //also access denied, either no 
matching role or an explicit deny
+                            break;
+                        }
+                    }
+
+                    if (redact){
+                        
+                    }
+
+                }
+               
+            }
+        }
+
+        return items;
     }
 
     @Override
@@ -506,4 +600,12 @@ public class RoleBasedAccessControlImpl implements 
IAccessControl {
         bs.setIdentifierBag(null);
     }
 
+    private void redact(RelatedBusinessInfo bs) {
+        bs.setBusinessKey(REDACTED);
+        bs.getDescription().clear();
+        bs.getName().clear();
+        bs.getName().add(new Name(REDACTED, "en"));
+        bs.getSharedRelationships().clear();
+    }
+
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to