/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


#ifndef __com_sun_star_security_XAccessControlContext_idl__ 
#define __com_sun_star_security_XAccessControlContext_idl__ 
 
#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl> 
#endif
#ifndef __com_sun_star_security_AccessControlException_idl__
#include <com/sun/star/security/AccessControlException.idl> 
#endif
 
 
//============================================================================= 
 
module com {  module sun {  module star {  module security {  
 
//============================================================================= 
 
/** An XAccessControlContext is used to make system resource access decisions
	based on the context it encapsulates.
	<p>
	More specifically, it encapsulates a context and has methods to check
	permissions equivalent to XAccessController interface,
	with one difference:
	The XAccessControlContext makes access decisions
	based on the context it encapsulates, rather than
	that of the current execution thread.
	</p>

    @since OpenOffice 1.1.2
*/
published interface XAccessControlContext : com::sun::star::uno::XInterface
{
	/** Determines whether the access request indicated by the specified
		permission should be allowed or denied, based on this context.
        The semantics are equivalent to the security permission classes of
        the Java platform.
		<p>
        You can also pass a sequence of permissions (sequence< any >) to check
        a set of permissions, e.g. for performance reasons.
		This method quietly returns if the access request is permitted,
		or throws a suitable AccessControlException otherwise.
		</p>
        
		@param perm
               permission to be checked
               
		@throws AccessControlException
				thrown if access is denied

        @see ::com::sun::star::security::AccessControlException
        @see ::com::sun::star::security::AllPermission
        @see ::com::sun::star::security::RuntimePermission
        @see ::com::sun::star::io::FilePermission
        @see ::com::sun::star::connection::SocketPermission
	*/
	void checkPermission(
        [in] any perm )
		raises (AccessControlException);
};

//============================================================================= 

}; }; }; };

#endif
