Author: woonsan
Date: Fri Dec  4 18:07:47 2009
New Revision: 887303

URL: http://svn.apache.org/viewvc?rev=887303&view=rev
Log:
JS2-1087: Adding access control for portlet definition query

Modified:
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/PortletRegistryService.java
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/util/PaginationUtils.java
    
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-restful-services.xml

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/PortletRegistryService.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/PortletRegistryService.java?rev=887303&r1=887302&r2=887303&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/PortletRegistryService.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/PortletRegistryService.java
 Fri Dec  4 18:07:47 2009
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import javax.servlet.ServletConfig;
@@ -33,12 +34,14 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.NumberUtils;
+import org.apache.jetspeed.JetspeedActions;
 import org.apache.jetspeed.components.portletregistry.PortletRegistry;
 import org.apache.jetspeed.om.portlet.PortletApplication;
 import org.apache.jetspeed.om.portlet.PortletDefinition;
 import org.apache.jetspeed.search.ParsedObject;
 import org.apache.jetspeed.search.SearchEngine;
 import org.apache.jetspeed.search.SearchResults;
+import org.apache.jetspeed.security.SecurityAccessController;
 import org.apache.jetspeed.services.beans.PortletApplicationBean;
 import org.apache.jetspeed.services.beans.PortletApplicationBeanCollection;
 import org.apache.jetspeed.services.beans.PortletDefinitionBean;
@@ -66,12 +69,15 @@
     @Context
     private ServletContext servletContext;
     
+    private SecurityAccessController securityAccessController;
+    
     private PortletRegistry portletRegistry;
     
     private SearchEngine searchEngine;
     
-    public PortletRegistryService(PortletRegistry portletRegistry, 
SearchEngine searchEngine)
+    public PortletRegistryService(SecurityAccessController 
securityAccessController, PortletRegistry portletRegistry, SearchEngine 
searchEngine)
     {
+        this.securityAccessController = securityAccessController;
         this.portletRegistry = portletRegistry;
         this.searchEngine = searchEngine;
     }
@@ -194,9 +200,9 @@
                 "AND " + queryParam;
             SearchResults searchResults = searchEngine.search(queryText);
             List<ParsedObject> searchResultList = searchResults.getResults();
-            pdBeans.setTotalSize(searchResultList.size());
+            ArrayList<PortletDefinition> searchedPortletDefinitions = new 
ArrayList<PortletDefinition>();
             
-            for (ParsedObject parsedObject : (List<ParsedObject>) 
PaginationUtils.subList(searchResultList, beginIndex, maxResults))
+            for (ParsedObject parsedObject : searchResultList)
             {
                 String uniqueName = 
SearchEngineUtils.getPortletUniqueName(parsedObject);
                 
@@ -207,17 +213,25 @@
                 
                 PortletDefinition pd = 
portletRegistry.getPortletDefinitionByUniqueName(uniqueName);
                 
-                if (pd != null)
+                if (pd != null && 
securityAccessController.checkPortletAccess(pd, JetspeedActions.MASK_VIEW))
                 {
-                    pdBeanList.add(new PortletDefinitionBean(pd));
+                    searchedPortletDefinitions.add(pd);
                 }
             }
+            
+            Collection<PortletDefinition> filteredPortletDefinitions = 
filterPortletDefinitionsBySecurityAccess(searchedPortletDefinitions, 
JetspeedActions.MASK_VIEW);
+            pdBeans.setTotalSize(filteredPortletDefinitions.size());
+            
+            for (PortletDefinition pd : (Collection<PortletDefinition>) 
PaginationUtils.subCollection(filteredPortletDefinitions, beginIndex, 
maxResults))
+            {
+                pdBeanList.add(new PortletDefinitionBean(pd));
+            }
         }
         else
         {
             if (StringUtils.isBlank(applicationName) && 
StringUtils.isBlank(definitionName))
             {
-                Collection<PortletDefinition> pds = 
portletRegistry.getAllPortletDefinitions();
+                Collection<PortletDefinition> pds = 
filterPortletDefinitionsBySecurityAccess(portletRegistry.getAllPortletDefinitions(),
 JetspeedActions.MASK_VIEW);
                 pdBeans.setTotalSize(pds.size());
                 
                 for (PortletDefinition pd : (Collection<PortletDefinition>) 
PaginationUtils.subCollection(pds, beginIndex, maxResults))
@@ -233,22 +247,19 @@
                 {
                     if (StringUtils.isBlank(definitionName))
                     {
-                        if (pa != null)
+                        Collection<PortletDefinition> pds = 
filterPortletDefinitionsBySecurityAccess(pa.getPortlets(), 
JetspeedActions.MASK_VIEW);
+                        pdBeans.setTotalSize(pds.size());
+                        
+                        for (PortletDefinition pd : (List<PortletDefinition>) 
PaginationUtils.subCollection(pds, beginIndex, maxResults))
                         {
-                            Collection<PortletDefinition> pds = 
pa.getPortlets();
-                            pdBeans.setTotalSize(pds.size());
-                            
-                            for (PortletDefinition pd : 
(List<PortletDefinition>) PaginationUtils.subList(pa.getPortlets(), beginIndex, 
maxResults))
-                            {
-                                pdBeanList.add(new PortletDefinitionBean(pd));
-                            }
+                            pdBeanList.add(new PortletDefinitionBean(pd));
                         }
                     }
                     else
                     {
                         PortletDefinition pd = pa.getPortlet(definitionName);
                         
-                        if (pd != null)
+                        if (pd != null && 
securityAccessController.checkPortletAccess(pd, JetspeedActions.MASK_VIEW))
                         {
                             pdBeanList.add(new PortletDefinitionBean(pd));
                             pdBeans.setTotalSize(1);
@@ -263,4 +274,29 @@
         return pdBeans;
     }
     
+    private Collection<PortletDefinition> 
filterPortletDefinitionsBySecurityAccess(Collection<PortletDefinition> 
collection, int mask)
+    {
+        if (securityAccessController == null)
+        {
+            return collection;
+        }
+        
+        if (collection == null || collection.isEmpty())
+        {
+            return Collections.emptyList();
+        }
+        
+        ArrayList<PortletDefinition> filteredCollection = new 
ArrayList<PortletDefinition>();
+        
+        for (PortletDefinition pd : collection)
+        {
+            if (securityAccessController.checkPortletAccess(pd, mask))
+            {
+                filteredCollection.add(pd);
+            }
+        }
+        
+        return filteredCollection;
+    }
+    
 }

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/util/PaginationUtils.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/util/PaginationUtils.java?rev=887303&r1=887302&r2=887303&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/util/PaginationUtils.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/services/rest/util/PaginationUtils.java
 Fri Dec  4 18:07:47 2009
@@ -59,35 +59,13 @@
     
     public static Collection<? extends Object> subCollection(final 
Collection<? extends Object> collection, int beginIndex, int maxResults)
     {
-        if (beginIndex < 0 || (beginIndex == 0 && maxResults < 0))
+        if (collection instanceof List)
         {
-            return collection;
-        }
-        else if (beginIndex >= collection.size())
-        {
-            return Collections.emptyList();
+            return subList((List<? extends Object>) collection, beginIndex, 
maxResults);
         }
         else
         {
-            List<Object> list = null;
-            
-            if (collection instanceof List)
-            {
-                list = (List<Object>) collection;
-            }
-            else
-            {
-                list = new ArrayList<Object>(collection);
-            }
-            
-            if (maxResults < 0)
-            {
-                return list.subList(beginIndex, list.size());
-            }
-            else
-            {
-                return list.subList(beginIndex, Math.min(list.size(), 
beginIndex + maxResults));
-            }
+            return subList(new ArrayList<Object>(collection), beginIndex, 
maxResults);
         }
     }
     

Modified: 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-restful-services.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-restful-services.xml?rev=887303&r1=887302&r2=887303&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-restful-services.xml
 (original)
+++ 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-restful-services.xml
 Fri Dec  4 18:07:47 2009
@@ -108,6 +108,7 @@
   <!-- Portlet Registry JAX-RS Service -->
   <bean id="jaxrsPortletRegistryService" 
class="org.apache.jetspeed.services.rest.PortletRegistryService">
     <meta key="j2:cat" value="default" />
+    <constructor-arg 
ref="org.apache.jetspeed.security.SecurityAccessController" />
     <constructor-arg 
ref="org.apache.jetspeed.components.portletregistry.PortletRegistry" />
     <constructor-arg ref="org.apache.jetspeed.search.SearchEngine" />
   </bean>



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

Reply via email to