Fixed #15299 -- Started the process of migrating the auth context processor support classes into the auth context processor module. Thanks to shailesh for the report, and v1v3kn for the draft patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15635 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
6ce03dd888
commit
7aa84917a4
|
@ -1,7 +1,34 @@
|
||||||
from django.core.context_processors import PermWrapper
|
|
||||||
from django.utils.functional import lazy, memoize, SimpleLazyObject
|
from django.utils.functional import lazy, memoize, SimpleLazyObject
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
|
|
||||||
|
# PermWrapper and PermLookupDict proxy the permissions system into objects that
|
||||||
|
# the template system can understand.
|
||||||
|
|
||||||
|
class PermLookupDict(object):
|
||||||
|
def __init__(self, user, module_name):
|
||||||
|
self.user, self.module_name = user, module_name
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return str(self.user.get_all_permissions())
|
||||||
|
|
||||||
|
def __getitem__(self, perm_name):
|
||||||
|
return self.user.has_perm("%s.%s" % (self.module_name, perm_name))
|
||||||
|
|
||||||
|
def __nonzero__(self):
|
||||||
|
return self.user.has_module_perms(self.module_name)
|
||||||
|
|
||||||
|
|
||||||
|
class PermWrapper(object):
|
||||||
|
def __init__(self, user):
|
||||||
|
self.user = user
|
||||||
|
|
||||||
|
def __getitem__(self, module_name):
|
||||||
|
return PermLookupDict(self.user, module_name)
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
# I am large, I contain multitudes.
|
||||||
|
raise TypeError("PermWrapper is not iterable.")
|
||||||
|
|
||||||
def auth(request):
|
def auth(request):
|
||||||
"""
|
"""
|
||||||
Returns context variables required by apps that use Django's authentication
|
Returns context variables required by apps that use Django's authentication
|
||||||
|
|
|
@ -84,28 +84,30 @@ def request(request):
|
||||||
return {'request': request}
|
return {'request': request}
|
||||||
|
|
||||||
# PermWrapper and PermLookupDict proxy the permissions system into objects that
|
# PermWrapper and PermLookupDict proxy the permissions system into objects that
|
||||||
# the template system can understand.
|
# the template system can understand. They once lived here -- they have
|
||||||
|
# been moved to django.contrib.auth.context_processors.
|
||||||
|
|
||||||
class PermLookupDict(object):
|
from django.contrib.auth.context_processors import PermLookupDict as RealPermLookupDict
|
||||||
def __init__(self, user, module_name):
|
from django.contrib.auth.context_processors import PermWrapper as RealPermWrapper
|
||||||
self.user, self.module_name = user, module_name
|
|
||||||
|
|
||||||
def __repr__(self):
|
class PermLookupDict(RealPermLookupDict):
|
||||||
return str(self.user.get_all_permissions())
|
def __init__(self, *args, **kwargs):
|
||||||
|
import warnings
|
||||||
|
warnings.warn(
|
||||||
|
"`django.core.context_processors.PermLookupDict` is " \
|
||||||
|
"deprecated; use `django.contrib.auth.context_processors.PermLookupDict` " \
|
||||||
|
"instead.",
|
||||||
|
PendingDeprecationWarning
|
||||||
|
)
|
||||||
|
super(PermLookupDict, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
def __getitem__(self, perm_name):
|
class PermWrapper(RealPermWrapper):
|
||||||
return self.user.has_perm("%s.%s" % (self.module_name, perm_name))
|
def __init__(self, *args, **kwargs):
|
||||||
|
import warnings
|
||||||
def __nonzero__(self):
|
warnings.warn(
|
||||||
return self.user.has_module_perms(self.module_name)
|
"`django.core.context_processors.PermWrapper` is " \
|
||||||
|
"deprecated; use `django.contrib.auth.context_processors.PermWrapper` " \
|
||||||
class PermWrapper(object):
|
"instead.",
|
||||||
def __init__(self, user):
|
PendingDeprecationWarning
|
||||||
self.user = user
|
)
|
||||||
|
super(PermWrapper, self).__init__(*args, **kwargs)
|
||||||
def __getitem__(self, module_name):
|
|
||||||
return PermLookupDict(self.user, module_name)
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
# I am large, I contain multitudes.
|
|
||||||
raise TypeError("PermWrapper is not iterable.")
|
|
||||||
|
|
|
@ -151,13 +151,19 @@ their deprecation, as per the :ref:`Django deprecation policy
|
||||||
The ``supports_inactive_user`` variable is not checked any
|
The ``supports_inactive_user`` variable is not checked any
|
||||||
longer and can be removed.
|
longer and can be removed.
|
||||||
|
|
||||||
* :meth:`~django.contrib.gis.geos.GEOSGeometry.transform` will raise
|
* :meth:`~django.contrib.gis.geos.GEOSGeometry.transform` will raise
|
||||||
a :class:`~django.contrib.gis.geos.GEOSException` when called
|
a :class:`~django.contrib.gis.geos.GEOSException` when called
|
||||||
on a geometry with no SRID value.
|
on a geometry with no SRID value.
|
||||||
|
|
||||||
* :class:`~django.http.CompatCookie` will be removed in favour of
|
* :class:`~django.http.CompatCookie` will be removed in favour of
|
||||||
:class:`~django.http.SimpleCookie`.
|
:class:`~django.http.SimpleCookie`.
|
||||||
|
|
||||||
|
* :class:`django.core.context_processors.PermWrapper` and
|
||||||
|
:class:`django.core.context_processors.PermLookupDict`
|
||||||
|
will be moved to :class:`django.contrib.auth.context_processors.PermWrapper`
|
||||||
|
and :class:`django.contrib.auth.context_processors.PermLookupDict`,
|
||||||
|
respectively.
|
||||||
|
|
||||||
* 2.0
|
* 2.0
|
||||||
* ``django.views.defaults.shortcut()``. This function has been moved
|
* ``django.views.defaults.shortcut()``. This function has been moved
|
||||||
to ``django.contrib.contenttypes.views.shortcut()`` as part of the
|
to ``django.contrib.contenttypes.views.shortcut()`` as part of the
|
||||||
|
|
|
@ -423,7 +423,7 @@ If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
|
||||||
via the :doc:`messages framework </ref/contrib/messages>`.
|
via the :doc:`messages framework </ref/contrib/messages>`.
|
||||||
|
|
||||||
* ``perms`` -- An instance of
|
* ``perms`` -- An instance of
|
||||||
``django.core.context_processors.PermWrapper``, representing the
|
``django.contrib.auth.context_processors.PermWrapper``, representing the
|
||||||
permissions that the currently logged-in user has.
|
permissions that the currently logged-in user has.
|
||||||
|
|
||||||
.. versionchanged:: 1.2
|
.. versionchanged:: 1.2
|
||||||
|
@ -435,6 +435,11 @@ If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
|
||||||
``user.get_and_delete_messages()``. It has been changed to include any
|
``user.get_and_delete_messages()``. It has been changed to include any
|
||||||
messages added via the :doc:`messages framework </ref/contrib/messages>`.
|
messages added via the :doc:`messages framework </ref/contrib/messages>`.
|
||||||
|
|
||||||
|
.. versionchanged:: 1.3
|
||||||
|
Prior to version 1.3, ``PermWrapper`` was located in
|
||||||
|
``django.contrib.auth.context_processors``.
|
||||||
|
|
||||||
|
|
||||||
django.core.context_processors.debug
|
django.core.context_processors.debug
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -828,3 +828,15 @@ Rationale for this decision:
|
||||||
|
|
||||||
* This location wasn't included in the translation building process for
|
* This location wasn't included in the translation building process for
|
||||||
JavaScript literals.
|
JavaScript literals.
|
||||||
|
|
||||||
|
``PermWrapper`` moved to ``django.contrib.auth.context_processors``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In Django 1.2, we began the process of changing the location of the
|
||||||
|
``auth`` context processor from ``django.core.context_processors`` to
|
||||||
|
``django.contrib.auth.context_processors``. However, the
|
||||||
|
``PermWrapper`` support class was mistakenly omitted from that
|
||||||
|
migration. In Django 1.3, the ``PermWrapper`` class has also been
|
||||||
|
moved to ``django.contrib.auth.context_processors``, along with the
|
||||||
|
``PermLookupDict`` support class. The new classes are functionally
|
||||||
|
identical to their old versions; only the module location has changed.
|
||||||
|
|
|
@ -661,7 +661,7 @@ How to log a user out
|
||||||
Login and logout signals
|
Login and logout signals
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
.. versionadded:: 1.3
|
.. versionadded:: 1.3
|
||||||
|
|
||||||
The auth framework uses two :doc:`signals </topics/signals>` that can be used
|
The auth framework uses two :doc:`signals </topics/signals>` that can be used
|
||||||
for notification when a user logs in or out.
|
for notification when a user logs in or out.
|
||||||
|
@ -949,7 +949,7 @@ includes a few other useful built-in views located in
|
||||||
Allows a user to reset their password by generating a one-time use link
|
Allows a user to reset their password by generating a one-time use link
|
||||||
that can be used to reset the password, and sending that link to the
|
that can be used to reset the password, and sending that link to the
|
||||||
user's registered e-mail address.
|
user's registered e-mail address.
|
||||||
|
|
||||||
.. versionchanged:: 1.3
|
.. versionchanged:: 1.3
|
||||||
The ``from_email`` argument was added.
|
The ``from_email`` argument was added.
|
||||||
|
|
||||||
|
@ -1334,9 +1334,13 @@ Permissions
|
||||||
|
|
||||||
The currently logged-in user's permissions are stored in the template variable
|
The currently logged-in user's permissions are stored in the template variable
|
||||||
``{{ perms }}``. This is an instance of
|
``{{ perms }}``. This is an instance of
|
||||||
:class:`django.core.context_processors.PermWrapper`, which is a
|
:class:`django.contrib.auth.context_processors.PermWrapper`, which is a
|
||||||
template-friendly proxy of permissions.
|
template-friendly proxy of permissions.
|
||||||
|
|
||||||
|
.. versionchanged:: 1.3
|
||||||
|
Prior to version 1.3, ``PermWrapper`` was located in
|
||||||
|
``django.contrib.auth.context_processors``.
|
||||||
|
|
||||||
In the ``{{ perms }}`` object, single-attribute lookup is a proxy to
|
In the ``{{ perms }}`` object, single-attribute lookup is a proxy to
|
||||||
:meth:`User.has_module_perms <django.contrib.auth.models.User.has_module_perms>`.
|
:meth:`User.has_module_perms <django.contrib.auth.models.User.has_module_perms>`.
|
||||||
This example would display ``True`` if the logged-in user had any permissions
|
This example would display ``True`` if the logged-in user had any permissions
|
||||||
|
|
Loading…
Reference in New Issue