# The Security Manager

This interface enables the programmer to configure security needs for the application. Your application needs to consider how a user of the library is authenticated, and how it is going to map user identifiers to authorization domains. Implementing this interface is your way to inform the XSLT library of these decisions.

## Features

`is_uri_permitted`
  This routine (inherited from `XM_XPATH_SECURITY_MANAGER`) is called by the fn:doc(), fn:doc-available() and fn:document() functions to check that it is permissible to read from the URI given as an argument to the function, so as to protect sensitive data from being seen by unauthorized personnel.
`is_output_uri_permitted`
  This routine is supposed to be called by the `XM_XSLT_OUTPUT_URI_RESOLVER` to decide if an xsl:result-document has permission to write to the URI specified as the value of it's href attribute. If your implementation withholds permission, then the transformation will be terminated with the non recoverable error: http://www.gobosoft.com/eiffel/gobo/gexslt/extension#OUTPUT_RESOLVER_ERROR.
`is_highly_secure / set_high_security`
  This pair of features enables your security manager to act in a bi-modal fashion. The interpretation of what high security means is entirely up to you.

## The default security manager: `XM_XSLT_DEFAULT_SECURITY_MANAGER`

This is the only concrete security manager provided by the library. If it is not suitable for your needs, then you must write your own, and supply it to the creation routine of your `XM_XSLT_OUTPUT_URI_RESOLVER`.

This implementation unconditionally allows all requests to read from a resource. For requests to write to a resource, it examines the state of the `is_highly_secure` attribute. If this is `True`, then it only allows writing to URIs of the stdout and string schemes.