mirror of
https://github.com/jazzband/django-authority.git
synced 2026-05-03 21:24:43 +00:00
add compat.py file for user model
This commit is contained in:
parent
9589dfc820
commit
2c2927f696
8 changed files with 56 additions and 48 deletions
14
authority/compat.py
Normal file
14
authority/compat.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
from django.conf import settings
|
||||
|
||||
|
||||
# Django 1.5 compatibility utilities, providing support for custom User models.
|
||||
# Since get_user_model() causes a circular import if called when app models are
|
||||
# being loaded, the user_model_label should be used when possible, with calls
|
||||
# to get_user_model deferred to execution time
|
||||
user_model_label = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')
|
||||
|
||||
try:
|
||||
from django.contrib.auth import get_user_model
|
||||
except ImportError:
|
||||
from django.contrib.auth.models import User
|
||||
get_user_model = lambda: User
|
||||
|
|
@ -6,7 +6,10 @@ from django.utils.safestring import mark_safe
|
|||
|
||||
from authority import permissions, get_choices_for
|
||||
from authority.models import Permission
|
||||
from authority.utils import User
|
||||
from authority.compat import get_user_model
|
||||
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class BasePermissionForm(forms.ModelForm):
|
||||
|
|
@ -34,6 +37,7 @@ class BasePermissionForm(forms.ModelForm):
|
|||
self.instance.approved = self.approved
|
||||
return super(BasePermissionForm, self).save(commit)
|
||||
|
||||
|
||||
class UserPermissionForm(BasePermissionForm):
|
||||
user = forms.CharField(label=_('User'))
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
from datetime import datetime
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.contenttypes import generic
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.contrib.auth.models import Group
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from authority.compat import user_model_label
|
||||
from authority.managers import PermissionManager
|
||||
from authority.utils import User
|
||||
|
||||
|
||||
class Permission(models.Model):
|
||||
|
|
@ -21,9 +20,9 @@ class Permission(models.Model):
|
|||
object_id = models.PositiveIntegerField()
|
||||
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
||||
|
||||
user = models.ForeignKey(User, null=True, blank=True, related_name='granted_permissions')
|
||||
user = models.ForeignKey(user_model_label, null=True, blank=True, related_name='granted_permissions')
|
||||
group = models.ForeignKey(Group, null=True, blank=True)
|
||||
creator = models.ForeignKey(User, null=True, blank=True, related_name='created_permissions')
|
||||
creator = models.ForeignKey(user_model_label, null=True, blank=True, related_name='created_permissions')
|
||||
|
||||
approved = models.BooleanField(_('approved'), default=False, help_text=_("Designates whether the permission has been approved and treated as active. Unselect this instead of deleting permissions."))
|
||||
|
||||
|
|
|
|||
|
|
@ -1,30 +1,33 @@
|
|||
from django import template
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
|
||||
from authority import get_check
|
||||
from authority import permissions
|
||||
from authority.compat import get_user_model
|
||||
from authority.models import Permission
|
||||
from authority.forms import UserPermissionForm
|
||||
from authority.utils import User
|
||||
|
||||
|
||||
User = get_user_model()
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def url_for_obj(view_name, obj):
|
||||
return reverse(view_name, kwargs={
|
||||
'app_label': obj._meta.app_label,
|
||||
'module_name': obj._meta.module_name,
|
||||
'pk': obj.pk})
|
||||
'app_label': obj._meta.app_label,
|
||||
'module_name': obj._meta.module_name,
|
||||
'pk': obj.pk}
|
||||
)
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def add_url_for_obj(obj):
|
||||
return url_for_obj('authority-add-permission', obj)
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def request_url_for_obj(obj):
|
||||
return url_for_obj('authority-add-permission-request', obj)
|
||||
|
|
@ -59,21 +62,23 @@ class PermissionComparisonNode(ResolverNode):
|
|||
def handle_token(cls, parser, token):
|
||||
bits = token.contents.split()
|
||||
if 5 < len(bits) < 3:
|
||||
raise template.TemplateSyntaxError("'%s' tag takes three, "
|
||||
"four or five arguments" % bits[0])
|
||||
raise template.TemplateSyntaxError(
|
||||
"'%s' tag takes three, "
|
||||
"four or five arguments" % bits[0]
|
||||
)
|
||||
end_tag = 'endifhasperm'
|
||||
nodelist_true = parser.parse(('else', end_tag))
|
||||
token = parser.next_token()
|
||||
if token.contents == 'else': # there is an 'else' clause in the tag
|
||||
if token.contents == 'else': # there is an 'else' clause in the tag
|
||||
nodelist_false = parser.parse((end_tag,))
|
||||
parser.delete_first_token()
|
||||
else:
|
||||
nodelist_false = template.NodeList()
|
||||
if len(bits) == 3: # this tag requires at most 2 objects . None is given
|
||||
if len(bits) == 3: # this tag requires at most 2 objects . None is given
|
||||
objs = (None, None)
|
||||
elif len(bits) == 4:# one is given
|
||||
elif len(bits) == 4: # one is given
|
||||
objs = (bits[3], None)
|
||||
else: #two are given
|
||||
else: # two are given
|
||||
objs = (bits[3], bits[4])
|
||||
return cls(bits[2], bits[1], nodelist_true, nodelist_false, *objs)
|
||||
|
||||
|
|
@ -111,6 +116,7 @@ class PermissionComparisonNode(ResolverNode):
|
|||
return ''
|
||||
return self.nodelist_false.render(context)
|
||||
|
||||
|
||||
@register.tag
|
||||
def ifhasperm(parser, token):
|
||||
"""
|
||||
|
|
@ -253,7 +259,7 @@ def get_permissions(parser, token):
|
|||
"""
|
||||
Retrieves all permissions associated with the given obj and user
|
||||
and assigns the result to a context variable.
|
||||
|
||||
|
||||
Syntax::
|
||||
|
||||
{% get_permissions obj %}
|
||||
|
|
@ -273,7 +279,7 @@ def get_permission_requests(parser, token):
|
|||
"""
|
||||
Retrieves all permissions requests associated with the given obj and user
|
||||
and assigns the result to a context variable.
|
||||
|
||||
|
||||
Syntax::
|
||||
|
||||
{% get_permission_requests obj %}
|
||||
|
|
@ -343,7 +349,7 @@ def get_permission(parser, token):
|
|||
|
||||
{% get_permission "poll_permission.change_poll" for request.user and poll as "is_allowed" %}
|
||||
{% get_permission "poll_permission.change_poll" for request.user and poll,second_poll as "is_allowed" %}
|
||||
|
||||
|
||||
{% if is_allowed %}
|
||||
I've got ze power to change ze pollllllzzz. Muahahaa.
|
||||
{% else %}
|
||||
|
|
@ -367,7 +373,7 @@ def get_permission_request(parser, token):
|
|||
|
||||
{% get_permission_request "poll_permission.change_poll" for request.user and poll as "asked_for_permissio" %}
|
||||
{% get_permission_request "poll_permission.change_poll" for request.user and poll,second_poll as "asked_for_permissio" %}
|
||||
|
||||
|
||||
{% if asked_for_permissio %}
|
||||
Dude, you already asked for permission!
|
||||
{% else %}
|
||||
|
|
@ -402,7 +408,7 @@ def permission_delete_link(context, perm):
|
|||
@register.inclusion_tag('authority/permission_request_delete_link.html', takes_context=True)
|
||||
def permission_request_delete_link(context, perm):
|
||||
"""
|
||||
Renders a html link to the delete view of the given permission request.
|
||||
Renders a html link to the delete view of the given permission request.
|
||||
Returns no content if the request-user has no permission to delete foreign
|
||||
permissions.
|
||||
"""
|
||||
|
|
@ -421,7 +427,7 @@ def permission_request_delete_link(context, perm):
|
|||
@register.inclusion_tag('authority/permission_request_approve_link.html', takes_context=True)
|
||||
def permission_request_approve_link(context, perm):
|
||||
"""
|
||||
Renders a html link to the approve view of the given permission request.
|
||||
Renders a html link to the approve view of the given permission request.
|
||||
Returns no content if the request-user has no permission to delete foreign
|
||||
permissions.
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -10,9 +10,10 @@ import authority
|
|||
from authority import permissions
|
||||
from authority.models import Permission
|
||||
from authority.exceptions import NotAModel, UnsavedModelInstance
|
||||
from authority.utils import User
|
||||
from authority.compat import get_user_model
|
||||
|
||||
|
||||
User = get_user_model()
|
||||
if VERSION >= (1, 5):
|
||||
FIXTURES = ['tests_custom.json']
|
||||
QUERY = Q(email="jezdez@github.com")
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
import django
|
||||
from django.conf import settings
|
||||
from django.contrib import auth
|
||||
|
||||
|
||||
def get_user_class():
|
||||
"""
|
||||
Returns the User model class. In Django 1.7 and above, get_user_model()
|
||||
internally uses the App Registry, which may not be queried until it is ready.
|
||||
We can break this cycle via indirection by returning a string instead.
|
||||
"""
|
||||
if django.VERSION[:2] >= (1, 7):
|
||||
return settings.AUTH_USER_MODEL
|
||||
elif hasattr(auth, "get_user_model"):
|
||||
return auth.get_user_model()
|
||||
else:
|
||||
return auth.models.User
|
||||
|
||||
|
||||
User = get_user_class()
|
||||
|
|
@ -47,7 +47,7 @@ MIDDLEWARE_CLASSES = (
|
|||
'django.middleware.common.CommonMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
#'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
|
||||
# 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
|
||||
)
|
||||
|
||||
INTERNAL_IPS = ('127.0.0.1',)
|
||||
|
|
@ -94,3 +94,7 @@ try:
|
|||
from local_settings import * # noqa
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
if VERSION >= (1, 6):
|
||||
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
|
||||
|
|
|
|||
4
tox.ini
4
tox.ini
|
|
@ -1,6 +1,6 @@
|
|||
[tox]
|
||||
envlist =
|
||||
py26-django{13,14,15,16},
|
||||
envlist =
|
||||
py26-django{13,14,15,16},
|
||||
py27-django{13,14,15,16,17},
|
||||
py33-django{15,16,17}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue