Extension points
================

Authentication Backends
-----------------------

FilteredModelBackend
....................

If a subclass of ``djactasauth.backends.FilteredModelBackend`` has a class
or instance level ``filter_kwargs`` field, then those filters would be applied
in the ``FilteredModelBackend.get_user`` method.

If there is no such field, it's ignored, and the behaviour is the same
as its parent, ``django.contrib.auth.backends.ModelBackend``.

An empty dictionary (``{}``) is also a valid value for filters, again,
the behavior is the same as if no such field was specifiec.

``ActAsBackend``
.....................

You can have precise control over which user can act as which other kind
of user, by subclassing ``djactasauth.backends.ActAsBackend``, and describing your policy
by overwriting the ``can_act_as(self, auth_user, user)`` method. For an
example, see ``djactasauth.backends.OnlySuperuserCanActAsBackend``.

``ActAsBackend`` by default doesn't allow anyone to act-as, so there
is no chance for misconfiguration.


Views
-----

``act_as_login_view``
.....................


You can extend ``djactasauth.views.act_as_login_view`` through the
standard ``kwargs``, as you would extend
``django.contrib.auth.views.login``, or you can create your own view
method that eventually delegates to it - the same way this implementation
does for Django's own :-)

Forms
-----

``get_login_form``
..................

``djactasauth.views.get_login_form``

This is used by ``djactasauth.views.act_as_login_view``. On the one hand,
it backports a Django 1.6 feature to 1.5 (pass in ``request`` as an argument
to the form), and if needed, it mixes in
``djactasauth.forms.InitialValuesFromRequestGetFormMixin``, so the username
can be prefilled for act-as-auth links from the ``GET`` request.

``InitialValuesFromRequestGetFormMixin``
........................................

``djactasauth.forms.InitialValuesFromRequestGetFormMixin`` is a
``Form`` mixin, which - given one of its super`s has initialized
the form's ``self.request``, will got through ``self.request.GET``, and
copy over the values to ``self.initial`` - unless ``self.initial`` already
has a value for the given field names you declared in your class's 
``query2initial`` property (``tuple``).

This is needed for a feature here, but you might find it useful in other
parts of your code too :-)

Other
-----

``djactasauth.util.act_as_login_url``
.....................................

Convenience method to encapsulate how the act as auth username should be
constructed from the two usernames.
