You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by re...@apache.org on 2001/02/12 05:14:11 UTC

cvs commit: jakarta-slide/src/share/org/apache/slide/security Security.java SecurityImpl.java

remm        01/02/11 20:14:11

  Modified:    src/share/org/apache/slide/security Security.java
                        SecurityImpl.java
  Log:
  - Added a new Security.hasPermission method which does the
    same as checkPermission, but returns a boolean instead of throwing an
    exception. Otherwise, checking security an expensive operation for client
    applications.
    Thanks to David McDonnell <Da...@csu.edu.au> for suggesting
    that change.
  
  Revision  Changes    Path
  1.11      +21 -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.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Security.java	2000/12/26 17:16:40	1.10
  +++ Security.java	2001/02/12 04:14:11	1.11
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/security/Security.java,v 1.10 2000/12/26 17:16:40 remm Exp $
  - * $Revision: 1.10 $
  - * $Date: 2000/12/26 17:16:40 $
  + * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/security/Security.java,v 1.11 2001/02/12 04:14:11 remm Exp $
  + * $Revision: 1.11 $
  + * $Date: 2001/02/12 04:14:11 $
    *
    * ====================================================================
    *
  @@ -73,7 +73,7 @@
    * Security helper.
    * 
    * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
  - * @version $Revision: 1.10 $
  + * @version $Revision: 1.11 $
    */
   public interface Security {
       
  @@ -269,6 +269,23 @@
                            ActionNode action)
           throws ServiceAccessException, AccessDeniedException, 
           ObjectNotFoundException;
  +    
  +    
  +    /**
  +     * Check whether or not an actor can perform the specified activity 
  +     * on a collection.
  +     * 
  +     * @param object Object on which access is tested
  +     * @param subject Subject who seeks to perform the action
  +     * @param action Action which is to be performed
  +     * @return true if the action can be performed
  +     * @exception ServiceAccessException DataSource access error
  +     * @exception ObjectNotFoundException Specified object was not found 
  +     * in the DataSource
  +     */
  +    boolean hasPermission(ObjectNode object, SubjectNode subject, 
  +                          ActionNode action)
  +        throws ServiceAccessException, ObjectNotFoundException;
       
       
       /**
  
  
  
  1.17      +33 -8     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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- SecurityImpl.java	2001/02/10 19:18:29	1.16
  +++ SecurityImpl.java	2001/02/12 04:14:11	1.17
  @@ -1,7 +1,7 @@
   /*
  - * $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 $
  + * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java,v 1.17 2001/02/12 04:14:11 remm Exp $
  + * $Revision: 1.17 $
  + * $Date: 2001/02/12 04:14:11 $
    *
    * ====================================================================
    *
  @@ -75,7 +75,7 @@
    * Security helper.
    * 
    * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
  - * @version $Revision: 1.16 $
  + * @version $Revision: 1.17 $
    */
   public final class SecurityImpl implements Security {
       
  @@ -343,6 +343,30 @@
           throws ServiceAccessException, AccessDeniedException, 
           ObjectNotFoundException {
           
  +        if (!hasPermission(object, subject, action)) {
  +            throw new AccessDeniedException(object.getUri(), subject.getUri(),
  +                                            action.getUri());
  +        }
  +        
  +    }
  +    
  +    
  +    /**
  +     * Check whether or not an actor can perform the specified activity 
  +     * on a collection.
  +     * 
  +     * @param object Object on which access is tested
  +     * @param subject Subject who seeks to perform the action
  +     * @param action Action which is to be performed
  +     * @return true if the action can be performed
  +     * @exception ServiceAccessException DataSource access error
  +     * @exception ObjectNotFoundException Specified object was not found 
  +     * in the DataSource
  +     */
  +    public boolean hasPermission(ObjectNode object, SubjectNode subject, 
  +                                 ActionNode action)
  +        throws ServiceAccessException, ObjectNotFoundException {
  +        
           boolean granted = false;
           boolean denied = false;
           boolean rootObjectReached = false;
  @@ -438,14 +462,15 @@
           // Negative permissions have priority (if they're defined on the same
           // node)
           if (denied) {
  -            throw new AccessDeniedException(object.getUri(), subject.getUri(),
  -                                            action.getUri());
  +            return false;
           }
           
           if (!granted) {
  -            throw new AccessDeniedException(object.getUri(), subject.getUri(),
  -                                            action.getUri());
  +            return false;
           }
  +        
  +        return true;
  +        
       }