Skip to content

Commit

Permalink
Merged from devel
Browse files Browse the repository at this point in the history
  • Loading branch information
lukaszb committed Oct 20, 2015
2 parents 2517110 + 48a0081 commit 2f71e7c
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 22 deletions.
6 changes: 6 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Release 1.3.1 (Oct 20, 2015)
============================

* Fixes for 1.8 compat


Release 1.3 (Jun 3, 2015)
=========================

Expand Down
11 changes: 8 additions & 3 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,21 @@ We need to hook ``django-guardian`` into our project.
'guardian',
)
2. Add extra authorization backend::
2. Add extra authorization backend to your `settings.py`::

AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', # default
'guardian.backends.ObjectPermissionBackend',
)

3. Configure anonymous user ID ::
3. Configure anonymous user ID in your `settings.py`::

ANONYMOUS_USER_ID = -1

4. Create ``guardian`` database tables by running::

python manage.py migrate

Usage
-----

Expand All @@ -63,10 +66,12 @@ with Django_.

Lets start really quickly::

>>> from django.contrib.auth.models import User, Group
>>> jack = User.objects.create_user('jack', 'jack@example.com', 'topsecretagentjack')
>>> admins = Group.objects.create(name='admins')
>>> jack.has_perm('change_group', admins)
False
>>> from guardian.models import UserObjectPermission
>>> UserObjectPermission.objects.assign_perm('change_group', user=jack, obj=admins)
<UserObjectPermission: admins | jack | change_group>
>>> jack.has_perm('change_group', admins)
Expand Down
2 changes: 1 addition & 1 deletion guardian/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"""
from __future__ import unicode_literals

VERSION = (1, 3)
VERSION = (1, 3, 1)

__version__ = '.'.join((str(each) for each in VERSION[:4]))

Expand Down
33 changes: 17 additions & 16 deletions guardian/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,9 @@
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.template import RequestContext
try:
from collections import OrderedDict as SortedDict
except ImportError:
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext, ugettext_lazy as _
from guardian.compat import get_user_model, get_model_name

from guardian.compat import OrderedDict, get_user_model, get_model_name
from guardian.forms import UserObjectPermissionsForm
from guardian.forms import GroupObjectPermissionsForm
from guardian.shortcuts import get_perms
Expand Down Expand Up @@ -150,16 +147,20 @@ def obj_perms_manage_view(self, request, object_pk):
shown. In order to add or manage user or group one should use links or
forms presented within the page.
"""
obj = get_object_or_404(self.queryset(request), pk=object_pk)
users_perms = SortedDict(
get_users_with_perms(obj, attach_perms=True,
with_group_users=False))
obj = get_object_or_404(self.get_queryset(request), pk=object_pk)
users_perms = OrderedDict(
sorted(
get_users_with_perms(obj, attach_perms=True, with_group_users=False).items(),
key=lambda user: getattr(user[0], get_user_model().USERNAME_FIELD)
)
)

users_perms.keyOrder.sort(key=lambda user:
getattr(user, get_user_model().USERNAME_FIELD))
groups_perms = SortedDict(
get_groups_with_perms(obj, attach_perms=True))
groups_perms.keyOrder.sort(key=lambda group: group.name)
groups_perms = OrderedDict(
sorted(
get_groups_with_perms(obj, attach_perms=True).items(),
key=lambda group: group[0].name
)
)

if request.method == 'POST' and 'submit_manage_user' in request.POST:
user_form = UserManage(request.POST)
Expand Down Expand Up @@ -223,7 +224,7 @@ def obj_perms_manage_user_view(self, request, object_pk, user_id):
Manages selected users' permissions for current object.
"""
user = get_object_or_404(get_user_model(), pk=user_id)
obj = get_object_or_404(self.queryset(request), pk=object_pk)
obj = get_object_or_404(self.get_queryset(request), pk=object_pk)
form_class = self.get_obj_perms_manage_user_form()
form = form_class(user, obj, request.POST or None)

Expand Down Expand Up @@ -276,7 +277,7 @@ def obj_perms_manage_group_view(self, request, object_pk, group_id):
Manages selected groups' permissions for current object.
"""
group = get_object_or_404(Group, id=group_id)
obj = get_object_or_404(self.queryset(request), pk=object_pk)
obj = get_object_or_404(self.get_queryset(request), pk=object_pk)
form_class = self.get_obj_perms_manage_group_form()
form = form_class(group, obj, request.POST or None)

Expand Down
11 changes: 11 additions & 0 deletions guardian/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,17 @@ def import_string(dotted_path):
except NameError:
basestring = unicode = str = str


# OrderedDict only available in Python 2.7.
# This will always be the case in Django 1.7 and above, as these versions
# no longer support Python 2.6.
# For Django <= 1.6 and Python 2.6 fall back to SortedDict.
try:
from collections import OrderedDict
except ImportError:
from django.utils.datastructures import SortedDict as OrderedDict


# Django 1.7 compatibility
# create_permission API changed: skip the create_models (second
# positional argument) if we have django 1.7+ and 2+ positional
Expand Down
3 changes: 2 additions & 1 deletion guardian/templates/admin/guardian/model/obj_perms_no.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{% load guardian_tags %}
{% friendly_load adminmedia %}
<img src="{{ STATIC_URL }}admin/img/icon-no.gif"/>
{% load staticfiles %}
<img src="{% static 'admin/img/icon-no.gif' %}"/>
3 changes: 2 additions & 1 deletion guardian/templates/admin/guardian/model/obj_perms_yes.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{% load guardian_tags %}
{% friendly_load adminmedia %}
<img src="{{ STATIC_URL }}admin/img/icon-yes.gif"/>
{% load staticfiles %}
<img src="{% static 'admin/img/icon-yes.gif' %}"/>

0 comments on commit 2f71e7c

Please sign in to comment.