Author: woonsan
Date: Fri Mar 19 19:07:10 2010
New Revision: 925380

URL: http://svn.apache.org/viewvc?rev=925380&view=rev
Log:
JS2-1131: Fixing the NPE problem when a user tries to edit the user's own 
space. (Caused because of looking up the system spaces only by name.)
Adding flexibility to configure space admin roles preference.
Also, adding security access check in space manager portlet.

Added:
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceAdminUtils.java
   (with props)
Modified:
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceNavigator.java
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesList.java
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources.properties
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_en.properties
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_ko.properties
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/spaces-manager.jsp

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java?rev=925380&r1=925379&r2=925380&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/PageNavigator.java
 Fri Mar 19 19:07:10 2010
@@ -17,7 +17,6 @@
 package org.apache.jetspeed.portlets.spaces;
 
 import java.io.IOException;
-import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -162,13 +161,10 @@ public class PageNavigator extends Gener
         request.setAttribute("spaceLinkElements", 
getSpaceLinkMenuElements(spaceBean, request));
         request.setAttribute("templatePages", getTemplatePageNodes(request));
         
-        boolean pageEditable = false;
-        Principal principal = request.getUserPrincipal();
-        if (principal != null)
+        if (SpaceAdminUtils.isUserSpaceOwner(spaceBean, request) || 
SpaceAdminUtils.isUserSpaceAdmin(spaceBean, admin, request))
         {
-            pageEditable = (admin.isUserInAdminRole(request) || 
admin.isAdminUser(request) || principal.getName().equals(spaceBean.getOwner()));
+            request.setAttribute("pageEditable", Boolean.TRUE);
         }
-        request.setAttribute("pageEditable", pageEditable ? Boolean.TRUE : 
Boolean.FALSE);
         
         super.doView(request, response);
     }

Added: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceAdminUtils.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceAdminUtils.java?rev=925380&view=auto
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceAdminUtils.java
 (added)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceAdminUtils.java
 Fri Mar 19 19:07:10 2010
@@ -0,0 +1,72 @@
+/*
+ * 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.jetspeed.portlets.spaces;
+
+import java.security.Principal;
+
+import javax.portlet.PortletRequest;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.jetspeed.administration.PortalAdministration;
+
+/**
+ * SpaceAdminUtils
+ * 
+ * @version $Id$
+ */
+public class SpaceAdminUtils
+{
+    public static final String SPACE_ADMIN_ROLES_PARAM_NAME = 
"spaceAdminRoles";
+
+    private SpaceAdminUtils()
+    {
+        
+    }
+    
+    public static boolean isUserSpaceOwner(SpaceBean spaceBean, PortletRequest 
request) 
+    {
+        Principal principal = request.getUserPrincipal();
+        
+        if (principal != null && 
principal.getName().equals(spaceBean.getOwner()))
+        {
+            return true;
+        }
+        
+        return false;
+    }
+    
+    public static boolean isUserSpaceAdmin(SpaceBean spaceBean, 
PortalAdministration portalAdmin, PortletRequest request) 
+    {
+        String spaceAdminRolesPref = 
request.getPreferences().getValue(SPACE_ADMIN_ROLES_PARAM_NAME, null);
+        
+        if (spaceAdminRolesPref != null)
+        {
+            String [] spaceAdminRoles = StringUtils.split(spaceAdminRolesPref, 
", \t\r\n");
+            
+            for (String role : spaceAdminRoles)
+            {
+                if (request.isUserInRole(role))
+                {
+                    return true;
+                }
+            }
+        }
+        
+        return portalAdmin.isAdminUser(request) || 
portalAdmin.isUserInAdminRole(request);
+    }
+    
+}

Propchange: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceAdminUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceAdminUtils.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceAdminUtils.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceNavigator.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceNavigator.java?rev=925380&r1=925379&r2=925380&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceNavigator.java
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpaceNavigator.java
 Fri Mar 19 19:07:10 2010
@@ -17,7 +17,6 @@
 package org.apache.jetspeed.portlets.spaces;
 
 import java.io.IOException;
-import java.security.Principal;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -93,22 +92,15 @@ public class SpaceNavigator extends Gene
         request.setAttribute(SpaceNavigator.ATTRIBUTE_SPACE, spaceBean);
         request.setAttribute(SpaceNavigator.ATTRIBUTE_SPACES, spaceBeans);
         
-        boolean spaceCreatable = false;
-        boolean spaceEditable = false;
-        Principal principal = request.getUserPrincipal();
-        if (principal != null)
+        if (SpaceAdminUtils.isUserSpaceOwner(spaceBean, request) || 
SpaceAdminUtils.isUserSpaceAdmin(spaceBean, admin, request))
         {
-            if (admin.isUserInAdminRole(request) || admin.isAdminUser(request))
-            {
-                spaceCreatable = spaceEditable = true;
-            }
-            else if (principal.getName().equals(spaceBean.getOwner()))
-            {
-                spaceEditable = true;
-            }
+            request.setAttribute("spaceEditable", Boolean.TRUE);
+        }
+        
+        if (SpaceAdminUtils.isUserSpaceAdmin(spaceBean, admin, request))
+        {
+            request.setAttribute("spaceCreatable", Boolean.TRUE);
         }
-        request.setAttribute("spaceEditable", spaceEditable ? Boolean.TRUE : 
Boolean.FALSE);
-        request.setAttribute("spaceCreatable", spaceCreatable ? Boolean.TRUE : 
Boolean.FALSE);
 
         super.doView(request, response);
     }

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesList.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesList.java?rev=925380&r1=925379&r2=925380&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesList.java
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesList.java
 Fri Mar 19 19:07:10 2010
@@ -102,6 +102,7 @@ public class SpacesList extends GenericS
                        if (spaceName != null)
                        {
                                Space space = 
spacesService.lookupSpace(spaceName);
+                               
                                if (space != null)
                                {
                                        try

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java?rev=925380&r1=925379&r2=925380&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java
 Fri Mar 19 19:07:10 2010
@@ -116,20 +116,43 @@ public class SpacesManager extends Gener
         String current = (String)PortletMessaging.receive(request, 
SpacesManager.MSG_TOPIC_SPACE_LIST, SpacesManager.MSG_SPACE_CHANGE);            
    
         if (current != null)
         {
+            // FIXME: lookupSpace() can find system spaces only, not user 
space.
+            //        So, what if a system space name is as same as a user 
space name?
                space = spacesService.lookupSpace(current);
-               spaceBean = new SpaceBean(space);
+               
+               if (space == null)
+               {
+                   space = spacesService.lookupUserSpace(current);
+               }
+        }
+        
+        if (space != null)
+        {
+            spaceBean = new SpaceBean(space);
         }
-        if (space == null)
+        else
         {
                spaceBean = new SpaceBean("", "");
                spaceBean.setDescription("");
                spaceBean.setTitle("");
                spaceBean.setSecurityConstraint("");
                spaceBean.setTheme(ThemeBean.getDefaultTheme(request, 
decorationFactory));
-        }        
+        }
+        
         request.setAttribute("constraints", retrieveConstraints(request));
         request.setAttribute("themes", ThemeBean.retrieveThemes(request, 
decorationFactory, spaceBean.getTheme()));
         request.setAttribute(SpaceNavigator.ATTRIBUTE_SPACE, spaceBean);
+        
+        if (SpaceAdminUtils.isUserSpaceOwner(spaceBean, request) || 
SpaceAdminUtils.isUserSpaceAdmin(spaceBean, admin, request))
+        {
+            request.setAttribute("spaceEditable", Boolean.TRUE);
+        }
+        
+        if (SpaceAdminUtils.isUserSpaceAdmin(spaceBean, admin, request))
+        {
+            request.setAttribute("spaceCreatable", Boolean.TRUE);
+        }
+        
         super.doView(request, response);        
     }
     
@@ -174,7 +197,18 @@ public class SpacesManager extends Gener
         {
             try
             {
-                Space space = (!"".equals(name) ? 
spacesService.lookupSpace(name) : null);
+                Space space = null;
+                
+                if (!"".equals(name))
+                {
+                    space = spacesService.lookupSpace(name);
+                    
+                    if (space == null)
+                    {
+                        space = spacesService.lookupUserSpace(name);
+                    }
+                }
+                
                 String path = admin.getPortalURL(actionRequest, 
actionResponse, (space != null ? space.getPath() : "/"));
                 actionResponse.sendRedirect(path);
                 return;
@@ -229,7 +263,15 @@ public class SpacesManager extends Gener
                else
                {
                 String owner = scrapeParameter(actionRequest, "spaceOwner");
+                // FIXME: lookupSpace() can find system spaces only, not user 
space.
+                //        So, what if a system space name is as same as a user 
space name?
                 Space space = spacesService.lookupSpace(name);
+                
+                if (space == null)
+                {
+                    space = spacesService.lookupUserSpace(name);
+                }
+                
                 if (space != null)
                 {
                        space.setDescription(description);
@@ -266,6 +308,7 @@ public class SpacesManager extends Gener
                        
                        spacesService.storeSpace(space);
                 }
+                
                 // redirect
                 String path = admin.getPortalURL(actionRequest, 
actionResponse, space.getPath());
                 actionResponse.sendRedirect(path);

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources.properties
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources.properties?rev=925380&r1=925379&r2=925380&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources.properties
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources.properties
 Fri Mar 19 19:07:10 2010
@@ -29,6 +29,7 @@ spaces.label.add = Add Space
 spaces.label.edit.current = Edit Current Space
 spaces.label.save = Save
 spaces.label.cancel = Cancel
+spaces.message.forbidden = You are not allowed to edit the current space.
 
 spaces.pages.label.folder = Folder
 spaces.pages.label.page = Page

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_en.properties
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_en.properties?rev=925380&r1=925379&r2=925380&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_en.properties
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_en.properties
 Fri Mar 19 19:07:10 2010
@@ -29,6 +29,7 @@ spaces.label.add = Add Space
 spaces.label.edit.current = Edit Current Space
 spaces.label.save = Save
 spaces.label.cancel = Cancel
+spaces.message.forbidden = You are not allowed to edit the current space.
 
 spaces.pages.label.folder = Folder
 spaces.pages.label.page = Page

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_ko.properties
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_ko.properties?rev=925380&r1=925379&r2=925380&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_ko.properties
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/spaces/resources/SpacesResources_ko.properties
 Fri Mar 19 19:07:10 2010
@@ -29,6 +29,7 @@ spaces.label.add = \ucd94\uac00
 spaces.label.edit.current = \uc2a4\ud398\uc774\uc2a4 \ud3b8\uc9d1
 spaces.label.save = \uc800\uc7a5
 spaces.label.cancel = \ucde8\uc18c
+spaces.message.forbidden = \ud574\ub2f9 \uc2a4\ud398\uc774\uc2a4\ub97c 
\ud3b8\uc9d1\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
 
 spaces.pages.label.folder = \ud3f4\ub354
 spaces.pages.label.page = \ud398\uc774\uc9c0

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/spaces-manager.jsp
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/spaces-manager.jsp?rev=925380&r1=925379&r2=925380&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/spaces-manager.jsp
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/spaces-manager.jsp
 Fri Mar 19 19:07:10 2010
@@ -33,7 +33,21 @@ limitations under the License.
   <c:set var="portalContextPath" value="/"/>
 </c:if>
 
-<form method="POST" action='<portlet:actionURL/>'>
+<c:set var="formDisplayble" value="false" />
+<c:choose>
+  <c:when test="${spaceCreatable}">
+    <c:set var="formDisplayble" value="true" />
+  </c:when>
+  <c:when test="${spaceEditable and not empty space.name}">
+    <c:set var="formDisplayble" value="true" />
+  </c:when>
+</c:choose>
+
+<c:choose>
+
+<c:when test="${formDisplayble}">
+
+  <form method="POST" action='<portlet:actionURL/>'>
   <input type='hidden' name='spacePersisted' value='${space.persisted}'/>
   <table width="100%">
     <tr>
@@ -96,4 +110,14 @@ limitations under the License.
       <th class="portlet-section-header" colspan="2"></th>
     </tr>
   </table>
-</form>
+  </form>
+
+</c:when>
+
+<c:otherwise>
+
+<p><em><fmt:message key='spaces.message.forbidden'/></em></p>
+
+</c:otherwise>
+
+</c:choose>



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

Reply via email to