Coverage Report - org.acegisecurity.AfterInvocationManager
 
Classes in this File Line Coverage Branch Coverage Complexity
AfterInvocationManager
N/A 
N/A 
1
 
 1  
 /* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
 2  
  *
 3  
  * Licensed under the Apache License, Version 2.0 (the "License");
 4  
  * you may not use this file except in compliance with the License.
 5  
  * You may obtain a copy of the License at
 6  
  *
 7  
  *     http://www.apache.org/licenses/LICENSE-2.0
 8  
  *
 9  
  * Unless required by applicable law or agreed to in writing, software
 10  
  * distributed under the License is distributed on an "AS IS" BASIS,
 11  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12  
  * See the License for the specific language governing permissions and
 13  
  * limitations under the License.
 14  
  */
 15  
 
 16  
 package org.acegisecurity;
 17  
 
 18  
 /**
 19  
  * Reviews the <code>Object</code> returned from a secure object invocation,
 20  
  * being able to modify the <code>Object</code> or throw an {@link
 21  
  * AccessDeniedException}.
 22  
  *
 23  
  * <p>
 24  
  * Typically used to ensure the principal is permitted to access the domain
 25  
  * object instance returned by a service layer bean. Can also be used to
 26  
  * mutate the domain object instance so the principal is only able to access
 27  
  * authorised bean properties or <code>Collection</code> elements. Often used
 28  
  * in conjunction with an {@link org.acegisecurity.acl.AclManager} to
 29  
  * obtain the access control list applicable for the domain object instance.
 30  
  * </p>
 31  
  *
 32  
  * <p>
 33  
  * Special consideration should be given to using an
 34  
  * <code>AfterInvocationManager</code> on bean methods that modify a database.
 35  
  * Typically an <code>AfterInvocationManager</code> is used with read-only
 36  
  * methods, such as <code>public DomainObject getById(id)</code>. If used with
 37  
  * methods that modify a database, a transaction manager should be used to
 38  
  * ensure any <code>AccessDeniedException</code> will cause a rollback of the
 39  
  * changes made by the transaction.
 40  
  * </p>
 41  
  *
 42  
  * @author Ben Alex
 43  
  * @version $Id: AfterInvocationManager.java 1784 2007-02-24 21:00:24Z luke_t $
 44  
  */
 45  
 public interface AfterInvocationManager {
 46  
     //~ Methods ========================================================================================================
 47  
 
 48  
     /**
 49  
      * Given the details of a secure object invocation including its returned <code>Object</code>, make an
 50  
      * access control decision or optionally modify the returned <code>Object</code>.
 51  
      *
 52  
      * @param authentication the caller that invoked the method
 53  
      * @param object the secured object that was called
 54  
      * @param config the configuration attributes associated with the secured object that was invoked
 55  
      * @param returnedObject the <code>Object</code> that was returned from the secure object invocation
 56  
      *
 57  
      * @return the <code>Object</code> that will ultimately be returned to the caller (if an implementation does not
 58  
      *         wish to modify the object to be returned to the caller, the implementation should simply return the
 59  
      *         same object it was passed by the <code>returnedObject</code> method argument)
 60  
      *
 61  
      * @throws AccessDeniedException if access is denied
 62  
      */
 63  
     Object decide(Authentication authentication, Object object, ConfigAttributeDefinition config,
 64  
         Object returnedObject) throws AccessDeniedException;
 65  
 
 66  
     /**
 67  
      * Indicates whether this <code>AfterInvocationManager</code> is able to process "after invocation"
 68  
      * requests presented with the passed <code>ConfigAttribute</code>.<p>This allows the
 69  
      * <code>AbstractSecurityInterceptor</code> to check every configuration attribute can be consumed by the
 70  
      * configured <code>AccessDecisionManager</code> and/or <code>RunAsManager</code> and/or
 71  
      * <code>AfterInvocationManager</code>.</p>
 72  
      *
 73  
      * @param attribute a configuration attribute that has been configured against the
 74  
      *        <code>AbstractSecurityInterceptor</code>
 75  
      *
 76  
      * @return true if this <code>AfterInvocationManager</code> can support the passed configuration attribute
 77  
      */
 78  
     boolean supports(ConfigAttribute attribute);
 79  
 
 80  
     /**
 81  
      * Indicates whether the <code>AfterInvocationManager</code> implementation is able to provide access
 82  
      * control decisions for the indicated secured object type.
 83  
      *
 84  
      * @param clazz the class that is being queried
 85  
      *
 86  
      * @return <code>true</code> if the implementation can process the indicated class
 87  
      */
 88  
     boolean supports(Class clazz);
 89  
 }