remm        01/02/10 11:18:29

  Modified:    src/share/org/apache/slide/common NamespaceConfig.java
               src/share/org/apache/slide/security SecurityImpl.java
  Log:
  - Add the concept of a guest user.
  - Add the guestpath element in the namespace configuration.
  - Improvements to self permissions. More details on the updated algorithm
    will be give in the Security page in the documentation.
  
  Revision  Changes    Path
  1.11      +26 -4     
jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java
  
  Index: NamespaceConfig.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- NamespaceConfig.java      2000/12/26 17:16:37     1.10
  +++ NamespaceConfig.java      2001/02/10 19:18:29     1.11
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java,v 1.10 
2000/12/26 17:16:37 remm Exp $
  - * $Revision: 1.10 $
  - * $Date: 2000/12/26 17:16:37 $
  + * $Header: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java,v 1.11 
2001/02/10 19:18:29 remm Exp $
  + * $Revision: 1.11 $
  + * $Date: 2001/02/10 19:18:29 $
    *
    * ====================================================================
    *
  @@ -79,7 +79,7 @@
    * Configuration of the Namespace.
    * 
    * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a>
  - * @version $Revision: 1.10 $
  + * @version $Revision: 1.11 $
    */
   public final class NamespaceConfig {
       
  @@ -215,6 +215,12 @@
       
       
       /**
  +     * Guest user path.
  +     */
  +    protected String guestPath;
  +    
  +    
  +    /**
        * File path.
        */
       protected String filesPath;
  @@ -435,6 +441,16 @@
       
       
       /**
  +     * Guest path accessor.
  +     * 
  +     * @return String Guest path
  +     */
  +    public String getGuestPath() {
  +        return guestPath;
  +    }
  +    
  +    
  +    /**
        * Files path accessor.
        * 
        * @return String Files path
  @@ -644,6 +660,12 @@
               usersPath = config.getConfiguration("userspath").getValue();
           } catch (ConfigurationException e) {
               usersPath = "";
  +        }
  +        
  +        try {
  +            guestPath = config.getConfiguration("guestpath").getValue();
  +        } catch (ConfigurationException e) {
  +            guestPath = "";
           }
           
           try {
  
  
  
  1.16      +35 -31    
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.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- SecurityImpl.java 2001/02/10 03:17:58     1.15
  +++ SecurityImpl.java 2001/02/10 19:18:29     1.16
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java,v 1.15 
2001/02/10 03:17:58 remm Exp $
  - * $Revision: 1.15 $
  - * $Date: 2001/02/10 03:17:58 $
  + * $Header: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java,v 1.16 
2001/02/10 19:18:29 remm Exp $
  + * $Revision: 1.16 $
  + * $Date: 2001/02/10 19:18:29 $
    *
    * ====================================================================
    *
  @@ -75,7 +75,7 @@
    * Security helper.
    * 
    * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a>
  - * @version $Revision: 1.15 $
  + * @version $Revision: 1.16 $
    */
   public final class SecurityImpl implements Security {
       
  @@ -194,10 +194,9 @@
           }
           
           if (!alreadyPresent) {
  -            checkCredentials(token, object, namespaceConfig
  -                             .getGrantPermissionAction());
  -            objectUri.getStore().grantPermission(objectUri, 
  -                                                            permission);
  +            checkCredentials(token, object, 
  +                             namespaceConfig.getGrantPermissionAction());
  +            objectUri.getStore().grantPermission(objectUri, permission);
           }
       }
       
  @@ -366,16 +365,31 @@
                   
                   NodePermission permission = 
                       (NodePermission) permissions.nextElement();
  +                String permissionSubject = permission.getSubjectUri();
                   
  -                //if (permission.isInheritable() 
  -                //|| permission.getObjectUri().equals(object.getUri())) {
  -                //granted = (subjectUri.isParent(permission.getSubjectUri())) 
  -                //&& (actionUri.isParent(permission.getActionUri()));
  -                if (permission.isInheritable() 
  -                    || permission.getObjectUri().equals(object.getUri())) {
  +                if (permissionSubject.equals("~")) {
  +                    
  +                    boolean check;
  +                    if (permission.isInheritable()) {
  +                        check = 
  +                            object.getUri().startsWith(subjectUri.toString());
  +                    } else {
  +                        check = object.getUri().equals(subjectUri.toString());
  +                    }
                       
  -                    String permissionSubject = permission.getSubjectUri();
  +                    // Self permission
  +                    granted = (!permission.isNegative())
  +                        && (check)
  +                        && (actionUri.toString()
  +                            .startsWith(permission.getActionUri()));
  +                    denied = (permission.isNegative())
  +                        && (check)
  +                        && (actionUri.toString()
  +                            .startsWith(permission.getActionUri()));
                       
  +                } else if (permission.isInheritable() 
  +                    || permission.getObjectUri().equals(object.getUri())) {
  +                    
                       if (permissionSubject.startsWith("/")) {
                           
                           // Node permission
  @@ -390,20 +404,6 @@
                               && (actionUri.toString()
                                   .startsWith(permission.getActionUri()));
                           
  -                    } else if (permissionSubject.equals("~")) {
  -                        
  -                        // Self permission
  -                        granted = (!permission.isNegative())
  -                            && (object.getUri().startsWith
  -                                (subjectUri.toString())) 
  -                            && (actionUri.toString()
  -                                .startsWith(permission.getActionUri()));
  -                        denied = (permission.isNegative())
  -                            &&  (object.getUri().startsWith
  -                                 (subjectUri.toString())) 
  -                            && (actionUri.toString()
  -                                .startsWith(permission.getActionUri()));
  -                        
                       } else {
                           
                           // Role permission
  @@ -611,9 +611,13 @@
       public ObjectNode getPrincipal(SlideToken token)
           throws ServiceAccessException, ObjectNotFoundException {
           
  +        String principalPath = 
  +            token.getCredentialsToken().getPublicCredentials();
  +        if ((principalPath == null) || (principalPath.equals(""))) {
  +            principalPath = namespaceConfig.getGuestPath();
  +        }
           Uri subjectUri = namespace.getUri
  -            (namespaceConfig.getUsersPath() + "/"
  -             + token.getCredentialsToken().getPublicCredentials());
  +            (namespaceConfig.getUsersPath() + "/" + principalPath);
           return subjectUri.getStore().retrieveObject(subjectUri);
           
       }
  
  
  

Reply via email to