pnever      2003/10/10 04:30:28

  Modified:    src/share/org/apache/slide/security Security.java
                        SecurityImpl.java
               src/webdav/server/org/apache/slide/webdav/util
                        PropertyHelper.java
  Log:
  Added signatures for checkPermission() and hasPermission() with
  SlideToken instead of SubjectNode (for principal). Marked existing
  signatures deprecated
  
  Revision  Changes    Path
  1.20      +36 -4     jakarta-slide/src/share/org/apache/slide/security/Security.java
  
  Index: Security.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/security/Security.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- Security.java     5 Aug 2003 08:51:00 -0000       1.19
  +++ Security.java     10 Oct 2003 11:30:28 -0000      1.20
  @@ -303,12 +303,28 @@
        * @exception ObjectNotFoundException Specified object was not found
        * in the DataSource
        * @exception AccessDeniedException Insufficent credentials
  +     * @deprecated use signature with SlideToken instead
        */
       void checkPermission(ObjectNode object, SubjectNode subject,
                            ActionNode action)
           throws ServiceAccessException, AccessDeniedException,
           ObjectNotFoundException;
       
  +    /**
  +     * Check whether or not an actor (principal) can perform the specified activity
  +     * on the specified resource.
  +     *
  +     * @param    token               a  SlideToken
  +     * @param    object              Object on which access is tested
  +     * @param    action              Action which is to be performed
  +     *
  +     * @throws   ServiceAccessException
  +     * @throws   AccessDeniedException
  +     * @throws   ObjectNotFoundException
  +     */
  +    void checkPermission(SlideToken token, ObjectNode object, ActionNode action)
  +        throws ServiceAccessException, AccessDeniedException,
  +        ObjectNotFoundException;
       
       /**
        * Check whether or not an actor can perform the specified activity
  @@ -321,11 +337,27 @@
        * @exception ServiceAccessException DataSource access error
        * @exception ObjectNotFoundException Specified object was not found
        * in the DataSource
  +     * @deprecated use signature with SlideToken instead
        */
       boolean hasPermission(ObjectNode object, SubjectNode subject,
                             ActionNode action)
           throws ServiceAccessException, ObjectNotFoundException;
       
  +    /**
  +     * Check whether or not an actor (principal) can perform the specified activity
  +     * on the specified resource.
  +     *
  +     * @param    token               a  SlideToken
  +     * @param    object              Object on which access is tested
  +     * @param    action              Action which is to be performed
  +     *
  +     * @return   true if the action can be performed
  +     *
  +     * @throws   ServiceAccessException
  +     * @throws   ObjectNotFoundException
  +     */
  +    boolean hasPermission(SlideToken token, ObjectNode object, ActionNode action)
  +        throws ServiceAccessException, ObjectNotFoundException;
       
       /**
        * Check whether or not the current user has the specified role.
  
  
  
  1.36      +74 -15    
jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java
  
  Index: SecurityImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- SecurityImpl.java 5 Aug 2003 08:51:00 -0000       1.35
  +++ SecurityImpl.java 10 Oct 2003 11:30:28 -0000      1.36
  @@ -63,16 +63,26 @@
   
   package org.apache.slide.security;
   
  +import java.lang.reflect.Constructor;
  +import java.lang.reflect.InvocationTargetException;
   import java.util.Enumeration;
   import java.util.Hashtable;
  -import java.util.HashMap;
   import java.util.Vector;
  -import java.lang.reflect.Constructor;
  -import java.lang.reflect.InvocationTargetException;
  -import org.apache.slide.common.*;
  -import org.apache.slide.structure.*;
  -import org.apache.slide.authenticate.CredentialsToken;
  +import org.apache.slide.common.Namespace;
  +import org.apache.slide.common.NamespaceConfig;
  +import org.apache.slide.common.ServiceAccessException;
  +import org.apache.slide.common.SlideToken;
  +import org.apache.slide.common.SlideTokenWrapper;
  +import org.apache.slide.common.Uri;
  +import org.apache.slide.structure.ActionNode;
  +import org.apache.slide.structure.LinkNode;
  +import org.apache.slide.structure.ObjectAlreadyExistsException;
  +import org.apache.slide.structure.ObjectNode;
  +import org.apache.slide.structure.ObjectNotFoundException;
  +import org.apache.slide.structure.Structure;
  +import org.apache.slide.structure.SubjectNode;
   import org.apache.slide.util.Configuration;
  +import org.apache.slide.webdav.util.AclConstants;
   
   /**
    * Security helper.
  @@ -388,21 +398,20 @@
                   Uri objectUri = namespace.getUri(token, object.getUri());
                   ObjectNode realObject = objectUri.getStore()
                       .retrieveObject(objectUri);
  -                SubjectNode subject = (SubjectNode) getPrincipal(token);
                   // check if permission has already been checked
                   Boolean permission = token.checkPermissionCache(object, action);
                   if (permission == null) {
                       // if not checked before, check now
                       try {
  -                checkPermission(realObject, subject, action);
  +                        checkPermission(token, realObject, action);
                           token.cachePermission(object, action, true);
                       } catch (AccessDeniedException ade) {
                           token.cachePermission(object, action, false);
                           ade.fillInStackTrace();
                           throw ade;
                       }
  -                } else {
  -                    
  +                }
  +                else {
                       if (!(permission.booleanValue())) {
                           throw new AccessDeniedException
                               (object.getUri(),
  @@ -444,6 +453,26 @@
           
       }
       
  +    /**
  +     * Check whether or not an actor (principal) can perform the specified activity
  +     * on the specified resource.
  +     *
  +     * @param    token               a  SlideToken
  +     * @param    object              Object on which access is tested
  +     * @param    action              Action which is to be performed
  +     *
  +     * @throws   ServiceAccessException
  +     * @throws   AccessDeniedException
  +     * @throws   ObjectNotFoundException
  +     */
  +    public void checkPermission(SlideToken token, ObjectNode object, ActionNode 
action) throws ServiceAccessException, AccessDeniedException, ObjectNotFoundException {
  +        
  +        if (!hasPermission(token, object, action)) {
  +            throw new AccessDeniedException(object.getUri(), 
getPrincipal(token).getUri(),
  +                                            action.getUri());
  +        }
  +    }
  +    
       
       /**
        * Check whether or not an actor can perform the specified activity
  @@ -631,6 +660,29 @@
           
       }
       
  +    /**
  +     * Check whether or not an actor (principal) can perform the specified activity
  +     * on the specified resource.
  +     *
  +     * @param    token               a  SlideToken
  +     * @param    object              Object on which access is tested
  +     * @param    action              Action which is to be performed
  +     *
  +     * @return   true if the action can be performed
  +     *
  +     * @throws   ServiceAccessException
  +     * @throws   ObjectNotFoundException
  +     */
  +    public boolean hasPermission(SlideToken token, ObjectNode object, ActionNode 
action) throws ServiceAccessException, ObjectNotFoundException {
  +        Boolean cachedPermission = token.checkPermissionCache(object, action);
  +        if (cachedPermission != null) {
  +            return cachedPermission.booleanValue();
  +        }
  +        else {
  +            return hasPermission(object, (SubjectNode)getPrincipal(token), action);
  +        }
  +    }
  +    
       
       /**
        * Enumerates permissions on an object.
  @@ -801,8 +853,15 @@
               principalPath = namespaceConfig.getGuestPath();
           }
           
  +        String userPrefix = "/";
  +        String configParam = 
namespaceConfig.getParameter(AclConstants.P_USER_COLLECTION);
  +        if ( configParam != null ) {
  +            if ( configParam.length() > 0 )
  +                userPrefix = "/" + configParam +"/";
  +        }
  +        
           Uri subjectUri = namespace.getUri
  -            (token, namespaceConfig.getUsersPath() + "/" + principalPath);
  +            (token, namespaceConfig.getUsersPath() + userPrefix + principalPath);
           
           try {
               return subjectUri.getStore().retrieveObject(subjectUri);
  
  
  
  1.53      +20 -29    
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/PropertyHelper.java
  
  Index: PropertyHelper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/PropertyHelper.java,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- PropertyHelper.java       18 Sep 2003 11:01:43 -0000      1.52
  +++ PropertyHelper.java       10 Oct 2003 11:30:28 -0000      1.53
  @@ -1619,69 +1619,60 @@
           NamespaceConfig config = nsaToken.getNamespaceConfig();
           Security security = nsaToken.getSecurityHelper();
           Structure structure = nsaToken.getStructureHelper();
  -        SubjectNode principalNode = null;
           ObjectNode object =  structure.retrieve(sToken, 
revisionDescriptors.getUri());
           
           try {
  -            principalNode = (SubjectNode) security.getPrincipal(sToken);
  -        } catch (SlideException e) {
  -            return xmlValue;
  -        } catch (ClassCastException e) {
  -            return xmlValue;
  -        }
  -        
  -        try {
               
               boolean readObject =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getReadObjectAction());
               boolean createObject =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getCreateObjectAction());
               boolean removeObject =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getRemoveObjectAction());
               boolean grantPermission =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getGrantPermissionAction());
               boolean revokePermission =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getRevokePermissionAction());
               boolean readPermissions =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getReadPermissionsAction());
               boolean lockObject =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getLockObjectAction());
               boolean killLock =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getKillLockAction());
               boolean readLocks =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getReadLocksAction());
               boolean readRevisionMetadata =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getReadRevisionMetadataAction());
               boolean createRevisionMetadata = security.hasPermission
  -                (object, principalNode,
  +                (sToken, object,
                    config.getCreateRevisionMetadataAction());
               boolean modifyRevisionMetadata = security.hasPermission
  -                (object, principalNode,
  +                (sToken, object,
                    config.getModifyRevisionMetadataAction());
               boolean removeRevisionMetadata = security.hasPermission
  -                (object, principalNode,
  +                (sToken, object,
                    config.getRemoveRevisionMetadataAction());
               boolean readRevisionContent =
  -                security.hasPermission(object, principalNode,
  +                security.hasPermission(sToken, object,
                                          config.getReadRevisionContentAction());
               boolean createRevisionContent = security.hasPermission
  -                (object, principalNode,
  +                (sToken, object,
                    config.getCreateRevisionContentAction());
               boolean modifyRevisionContent = security.hasPermission
  -                (object, principalNode,
  +                (sToken, object,
                    config.getModifyRevisionContentAction());
               boolean removeRevisionContent = security.hasPermission
  -                (object, principalNode,
  +                (sToken, object,
                    config.getRemoveRevisionContentAction());
               
               boolean canRead = readObject && readRevisionMetadata
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to